Juiste syntaxis zoals beschreven in de handleiding :
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;
Waar pk_id
is elke (combinatie van) kolom(men) die uniek is . Mogelijk user_id
, search_time
in jouw geval - of, handiger, een surrogaat primaire sleutel.
Voor slechts een enkele user_id
u kunt vereenvoudigen tot:
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;
Aan de andere kant, om te gaan met meerdere gebruikers tegelijk, moet u PARTITION BY
. toevoegen naar uw vensterfunctie:
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;