sql >> Databáze >  >> RDS >> PostgreSQL

Uchovávejte pouze posledních 5 výsledků vyhledávání uživatele v tabulce

Správná syntaxe jak je podrobně popsáno v příručce :

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;

Kde pk_id je libovolný sloupec (kombinace), který je jedinečný . Může to být user_id , search_time ve vašem případě – nebo, pohodlněji, náhradní primární klíč.

Pouze za jedinou user_id můžete zjednodušit na:

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;

Na druhou stranu řešit více uživatelů najednou, musíte přidat PARTITION BY do funkce 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. Porovnání dat pomocí Dynamic Action na DatePicker Oracle Apex

  2. Udržujte schéma MySQL v synchronizaci mezi počítači

  3. Jak naplnit gridview pomocí mysql?

  4. Jak provést více dotazů mysql společně v PHP?