PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Przechowuj w tabeli tylko 5 ostatnich wyników wyszukiwania użytkownika

Właściwa składnia zgodnie z opisem w instrukcji :

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;

Gdzie pk_id to dowolna (kombinacja) kolumn, która jest unikalna . Może być user_id , search_time w twoim przypadku - lub, wygodniej, zastępczy klucz podstawowy.

Tylko singiel user_id możesz uprościć do:

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;

Z drugiej strony, aby poradzić sobie z wieloma użytkowników jednocześnie, musisz dodać PARTITION BY do funkcji okna:

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. Utwórz alias dla tabeli PostgreSQL

  2. DLA KAŻDEGO OŚWIADCZENIA przykład wyzwalacza

  3. Używanie słownika do przekazywania parametrów do instrukcji postgresql w pythonie

  4. Niezgodność wersji serwera PostgresSQL / pgAdmin4 / dump

  5. Jak uruchomić zadanie utworzone przez pgagent w Postgres