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

एकाधिक पैरामीटर और शर्तों पर SQL द्वीप का पता लगाएं

अपडेट किए गए प्रश्न का उत्तर

SELECT *
FROM  (
   SELECT *
         ,lag(val, 1, 0) OVER (PARTITION BY status ORDER BY id) last_val
         ,lag(status) OVER (PARTITION BY val ORDER BY id) last_status
   FROM   t1
   ) x
WHERE  status = 1
AND    (last_val <> val OR last_status = 0)

कैसे?

पहले की तरह ही, लेकिन इस बार दो विंडो फ़ंक्शंस को मिलाएं। डिवाइस पर स्विच करना तभी योग्य होता है जब ..
1. पिछला स्विच ऑन किया गया एक भिन्न था एक।
2. या उसी डिवाइस को बंद स्विच कर दिया गया है इसकी अंतिम प्रविष्टि में। NULL with के साथ कॉर्नर केस विभाजन की पहली पंक्ति के लिए अप्रासंगिक है, क्योंकि तब पंक्ति पहले से ही 1. . में योग्य है

प्रश्न के मूल संस्करण का उत्तर दें।

यदि आपका मैं आपके कार्य को सही ढंग से समझता हूं, तो यह सरल प्रश्न काम करता है:

SELECT *
FROM  (
   SELECT *
         ,lag(val, 1, 0) OVER (ORDER BY id) last_on
   FROM   t1
   WHERE  status = 1
   ) x
WHERE  last_on <> val

अनुरोध के अनुसार पंक्ति 1, 3, 6, 7 लौटाता है।

कैसे?

सबक्वेरी आपके विवरण के अनुसार, सभी स्विचिंग को अनदेखा कर देती है, क्योंकि यह सिर्फ शोर है। उन प्रविष्टियों को छोड़ देता है जहां एक उपकरण चालू होता है। उनमें से, केवल वे प्रविष्टियाँ अयोग्य हैं, जहाँ एक ही उपकरण पहले से चालू था (अंतिम प्रविष्टि स्विचिंग चालू)। विंडो फ़ंक्शन lag() उस के लिए। विशेष रूप से मैं 0 . प्रदान करता हूं पहली पंक्ति के विशेष मामले को कवर करने के लिए डिफ़ॉल्ट के रूप में - यह मानते हुए कि val = 0 के साथ कोई उपकरण नहीं है .
अगर है, तो दूसरी असंभव संख्या चुनें।
यदि कोई संख्या असंभव नहीं है, तो विशेष मामले को NULL के रूप में छोड़ दें lag(val) OVER ... . के साथ और बाहरी क्वेरी में इसके साथ जांचें:

WHERE last_on IS DISTINCT FROM val



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे pg_typeof () PostgreSQL में काम करता है

  2. मैं त्रुटि संबंध प्राप्त करता रहता हूं [तालिका] मौजूद नहीं है

  3. PostgreSQL:डिफ़ॉल्ट बाधा नाम

  4. ईएफ कोर में चयन के लिए अद्यतन को कैसे कार्यान्वित करें

  5. Psycopg2 INSERT को लूप में चलने में इतना समय क्यों लग रहा है और मैं इसे कैसे गति दूं?