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

विंडो फ़ंक्शंस के लिए नियतात्मक सॉर्ट ऑर्डर

अगर आपके पास slno नहीं है आपकी तालिका में, तो आपके पास कोई विश्वसनीय जानकारी नहीं है कि कौन सी पंक्ति पहले डाली गई थी। किसी तालिका में कोई प्राकृतिक क्रम नहीं है, पंक्तियों का भौतिक क्रम किसी भी समय बदल सकता है (किसी भी अद्यतन के साथ, या VACUUM के साथ) , आदि)

आप कर सकते थे एक अविश्वसनीय . का उपयोग करें चाल:आंतरिक ctid by द्वारा आदेश ।

select *
from  (
   select id, status
        , row_number() OVER (PARTITION BY id
                             ORDER BY date, ctid) AS row_num
   from   status  -- that's your table name??
   where  date >= '2015-06-01'  -- assuming column is actually a date
   and    date <  '2015-07-01'
  ) sub
where  row_num = 1;
  • किसी अन्य जानकारी के अभाव में कौन सी पंक्ति पहले आई (जो एक डिज़ाइन त्रुटि . है शुरू करने के लिए, इसे ठीक करें!), आप आंतरिक टुपल आईडी ctid

    प्रारंभ में डालने पर पंक्तियाँ भौतिक क्रम में होंगी, लेकिन यह किसी भी समय तालिका या VACUUM में किसी भी लेखन कार्य के साथ बदल सकती हैं। या अन्य कार्यक्रम।
    यह अंतिम उपाय का एक उपाय है और यह करेगा विराम।

  • आपकी प्रस्तुत की गई क्वेरी कई मामलों में अमान्य थी:पहले सीटीई में कॉलम का नाम गायब, दूसरे सीटीई में टेबल का नाम गायब, ...

  • इसके लिए आपको सीटीई की जरूरत नहीं है।

DISTINCT ON . के साथ आसान (ctid के लिए विचार वही लागू करें):

SELECT DISTINCT ON (id)
       id, status
FROM   status
WHERE  date >= '2015-06-01'
AND    date <  '2015-07-01'
ORDER  BY id, date, ctid;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres में, आप किसी विशेष कॉलम के लिए संभावित मानों को कैसे प्रतिबंधित करते हैं?

  2. मैं Postgresql में कैसे सत्यापित कर सकता हूं कि JSON मान्य है?

  3. क्यों PG::UniqueViolation:ERROR:डुप्लिकेट कुंजी मान अद्वितीय बाधा का उल्लंघन करता है?

  4. मैं हेरोकू पर स्ट्रैपी के साथ पोस्टग्रेस डीबी से कनेक्ट नहीं हो सकता

  5. हमेशा अप-टू-डेट पढ़ने/लिखने के परीक्षण सर्वर को बनाए रखने के लिए PostgreSQL तार्किक प्रतिकृति का उपयोग करना