PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Simpan hanya 5 hasil pencarian terakhir dari pengguna dalam sebuah tabel

Sintaks yang tepat seperti yang dijelaskan dalam manual :

DELETE FROM history_user h
USING (
    SELECT pk_id, row_number() OVER (ORDER BY search_time DESC) AS rn;
    FROM   history_user
    WHERE  user_id = 188
    ) sub
WHERE sub.rn > 5
AND   h.pk_id = sub.pk_id;

Dimana pk_id adalah setiap (kombinasi) kolom yang unik . Mungkin user_id , search_time dalam kasus Anda - atau, lebih mudahnya, kunci primer pengganti.

Hanya untuk tunggal user_id Anda dapat menyederhanakan menjadi:

DELETE FROM history_user h
USING (
    SELECT pk_id
    FROM   history_user
    WHERE  user_id = 188
    ORDER  BY search_time DESC
    OFFSET 5
    ) sub
WHERE h.pk_id = sub.pk_id;

Di sisi lain, untuk menangani banyak pengguna sekaligus, Anda perlu menambahkan PARTITION BY ke fungsi jendela Anda:

DELETE FROM history_user h
USING (
    SELECT pk_id, row_number() OVER (PARTITION BY user_id
                                     ORDER BY search_time DESC) AS rn;
    FROM   history_user
    ) sub
WHERE sub.rn > 5
AND   h.pk_id = sub.pk_id;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psycopg2 setara dengan mysqldb.escape_string?

  2. PostgREST / PostgreSQL Tidak dapat memperbesar pesan buffer string

  3. 8 Fitur kompatibilitas Oracle baru di EnterpriseDB PPAS 9.2 Beta

  4. Kuadran 2 di PostgresConf US 2018

  5. Rails:Cara membuat kolom waktu dengan zona waktu di postgres