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

PostgreSQL सबसे पुराने रिकॉर्ड को छोड़कर सभी को हटा देता है

इसे यह करना चाहिए:

delete from devices
using (
   select ctid as cid, 
          row_number() over (partition by devicename, objectid order by timestamp asc) as rn
   from devices
) newest
where newest.cid = devices.ctid
and newest.rn <> 1;

यह एक व्युत्पन्न तालिका बनाता है जो (पता, डिवाइसनाम, ऑब्जेक्टिड) के प्रत्येक संयोजन के लिए अद्वितीय संख्या प्रदान करेगा (सबसे छोटा टाइमस्टैम्प वाला एक) value) नंबर 1. फिर इस परिणाम का उपयोग उन सभी को हटाने के लिए किया जाता है जिनके पास नंबर 1 नहीं है। वर्चुअल कॉलम ctid उन पंक्तियों को विशिष्ट रूप से पहचानने के लिए उपयोग किया जाता है (यह Postgres द्वारा आपूर्ति की गई एक आंतरिक पहचानकर्ता है)।

ध्यान दें कि वास्तव में बड़ी मात्रा में पंक्तियों को हटाने के लिए, इरविन का दृष्टिकोण निश्चित रूप से तेज़ होगा।

SQLFiddle डेमो:http://www.sqlfiddle.com/#!1/5d9fe/ 2



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL डेटाबेस की टिप्पणी कैसे प्राप्त करें?

  2. तैयार प्रश्नों को डी-आवंटित करना

  3. PostgreSQL में डिग्री () फ़ंक्शन कैसे काम करता है

  4. PostgreSQL के साथ उत्पादन में जाने के लिए दस युक्तियाँ

  5. फ़ंक्शन सिंटैक्स त्रुटि