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

पोस्टग्रेस्क्ल में समूहों को कैसे लेबल करें जब समूह संबंधित पिछली पंक्ति पर निर्भर करता है?

एक "एक चयन के भीतर चयन करें" इसे आमतौर पर "उप-चयन" या "सबक्वायरी" कहा जाता है आपके विशेष मामले में यह एक सहसंबंधित सबक्वेरी है . LATERAL जॉइन (पोस्टग्रेज 9.3 में नया) बड़े पैमाने पर सहसंबद्ध उपश्रेणियों को अधिक लचीले समाधानों से बदल सकता है:

मुझे नहीं लगता कि आपको यहां किसी की जरूरत है।

आपके पहले मामले . के लिए यह क्वेरी शायद तेज़ और आसान है, हालांकि:

SELECT date, max(value) OVER (PARTITION BY grp) AS value
FROM  (
   SELECT *, count(value) OVER (ORDER BY date) AS grp
   FROM   test_fill_null
   ) sub;

count() केवल गैर-शून्य मानों की गणना करता है, इसलिए grp प्रत्येक गैर-शून्य value के साथ वृद्धि की जाती है , जिससे वांछित के रूप में समूह बनते हैं। एक चुनना आसान नहीं है गैर-शून्य value प्रति grp बाहरी में SELECT

आपके दूसरे मामले . के लिए , मैं मान लूंगा कि पंक्तियों का प्रारंभिक क्रम (id1, id2, tms) द्वारा निर्धारित किया जाता है जैसा कि आपके एक प्रश्न द्वारा दर्शाया गया है।

SELECT id1, id2, tms
     , count(step) OVER (ORDER BY id1, id2, tms) AS group_id
FROM  (
   SELECT *, CASE WHEN lag(tms, 1, '-infinity') OVER (PARTITION BY id1 ORDER BY id2, tms)
                       < tms - interval '5 min'
                  THEN true END AS step
   FROM   table0
   ) sub
ORDER  BY id1, id2, tms;

अपने वास्तविक आदेश के अनुकूल। इनमें से कोई एक इसे कवर कर सकता है:

PARTITION BY id1 ORDER BY id2  -- ignore tms
PARTITION BY id1 ORDER BY tms  -- ignore id2

SQL Fiddle एक विस्तृत उदाहरण के साथ।

संबंधित:



  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. बेंचमार्किंग पोस्टग्रेज-XL

  3. SQLAlchemy और postgresql में दो उपश्रेणियों का संघ कैसे करें

  4. सभी PostgreSQL टेबल से जुड़ें और एक पायथन डिक्शनरी बनाएं

  5. मैं कपड़े के साथ एक पोस्टग्रेस्क्ल उपयोगकर्ता कैसे बना सकता हूं