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

PostgreSQL - कॉलम मान बदल गया - क्वेरी ऑप्टिमाइज़ेशन चुनें

विश्लेषणात्मक के साथ मैं इसे इस तरह से करूंगा:

SELECT id, val
  FROM ( SELECT id, val
           ,LAG(val) OVER (ORDER BY id) AS prev_val
       FROM p ) x
  WHERE val <> COALESCE(prev_val, val)
  ORDER BY id

अपडेट करें (कुछ स्पष्टीकरण):

विश्लेषणात्मक कार्य प्रसंस्करण के बाद के चरण के रूप में कार्य करते हैं। क्वेरी परिणाम को समूहों में विभाजित किया गया है (partition by ) और विश्लेषणात्मक कार्य समूह के संदर्भ में लागू किया जाता है।

इस मामले में, क्वेरी p . से एक चयन है . लागू किया जा रहा विश्लेषणात्मक कार्य LAG . है . चूंकि कोई partition by नहीं है खंड, केवल एक समूहीकरण है:संपूर्ण परिणाम सेट। यह समूहीकरण id . द्वारा आदेशित किया गया है . LAG निर्दिष्ट क्रम का उपयोग करके समूहीकरण में पिछली पंक्ति का मान लौटाता है। परिणाम प्रत्येक पंक्ति में एक अतिरिक्त कॉलम (उपनाम prev_val) है जो val है पिछली पंक्ति के। वह सबक्वेरी है।

फिर हम उन पंक्तियों की तलाश करते हैं जहां val val . से मेल नहीं खाता पिछली पंक्ति (prev_val) की। COALESCE पहली पंक्ति के विशेष मामले को संभालता है जिसका कोई पिछला मान नहीं है।

विश्लेषणात्मक कार्य पहली बार में थोड़ा अजीब लग सकता है, लेकिन विश्लेषणात्मक कार्यों की खोज में बहुत सारे उदाहरण मिलते हैं कि वे कैसे काम करते हैं। उदाहरण के लिए:http ://www.cs.utexas.edu/~cannata/dbms/Analytic%20Functions%20in%20Oracle%208i%20and%209i.htm बस याद रखें कि यह एक पोस्ट-प्रोसेसिंग चरण है। जब तक आप इसे सबक्वायरी नहीं करते तब तक आप विश्लेषणात्मक फ़ंक्शन के मूल्य पर फ़िल्टरिंग आदि नहीं कर पाएंगे।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेज में REINDEX चलाने की आवश्यकता कब होती है

  2. डॉकटर-कंपोज़ के साथ शुरू होने पर पोस्टग्रेज तुरंत बंद हो जाता है

  3. PHP PDO का उपयोग करके PostgreSQL स्कीमा सेट करने का सबसे अच्छा विकल्प

  4. PostgreSQL में दिनांक फ़ील्ड से सप्ताह का दिन निकालें मान लें कि सप्ताह सोमवार से शुरू होता है

  5. PostgreSQL में JSONB मान मर्ज करना?