उचित सिंटैक्स मैन्युअल में दिए गए विवरण के अनुसार :
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
add जोड़ना होगा आपके विंडो फ़ंक्शन के लिए:
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;