PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

तालिका में उपयोगकर्ता के केवल अंतिम 5 खोज परिणाम रखें

उचित सिंटैक्स मैन्युअल में दिए गए विवरण के अनुसार :

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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक्लिप्सलिंक के साथ पोस्टग्रेज एनम पर जावा एनम का मानचित्रण

  2. रूबीमाइन रिमोट कनेक्शन को हेरोकू पोस्टग्रेएसक्यूएल में कॉन्फ़िगर करें

  3. PostgreSQL में एक पंक्ति में विंडो फ़ंक्शन का पहला और अंतिम मान

  4. विदेशी सर्वर में शामिल होने/दबाने से पहले सबक्वायरी के मूल्यांकन को कैसे बाध्य करें

  5. मैं numpy NaN ऑब्जेक्ट्स को SQL नल में कैसे परिवर्तित करूं?