適切な構文
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;
pk_id
の場所 一意である任意の(組み合わせの)列です。 。 user_id
の可能性があります 、search_time
あなたの場合-または、より便利なことに、代理主キー。
シングルだけ user_id
次のように簡略化できます:
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;
一方、複数に対処するには ユーザーを一度に追加するには、PARTITION BY
を追加する必要があります ウィンドウ関数へ:
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;