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

क्रम में दो पंक्तियों का अंतर या अनुपात प्राप्त करने के लिए एकत्रीकरण कार्य

चूँकि there are only two rows per price , यह बहुत हो सकता है सरल और तेज़:

SELECT n.item, n.price - o.price AS diff, n.price / o.price AS ratio
FROM   price n                 -- "new"
JOIN   price o USING (item)    -- "old"
WHERE  n.day > o.day;

->SQLfiddle

इस फ़ॉर्म का अतिरिक्त लाभ यह है कि आप सीधे दोनों पंक्तियों के सभी स्तंभों का उपयोग कर सकते हैं।

अधिक जटिल परिदृश्यों . के लिए (इसके लिए जरूरी नहीं), जैसा कि बताया गया है, आप विंडो फ़ंक्शंस का उपयोग कर सकते हैं। यहाँ जो सुझाव दिया गया है, उससे कहीं अधिक सरल तरीका है:

SELECT DISTINCT ON (item)
       item
      ,price - lead(price) OVER (PARTITION BY item ORDER BY day DESC) AS diff
FROM   price
ORDER  BY item, day DESC;

यहां केवल एक विंडो फ़ंक्शन की आवश्यकता है। और एक क्वेरी स्तर, चूंकि DISTINCT ON बाद लागू किया जाता है खिड़की के कार्य। विंडो में सॉर्ट ऑर्डर समग्र सॉर्ट ऑर्डर से सहमत है, प्रदर्शन में मदद करता है।



  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. Postgresql में क्रॉस-फील्ड डुप्लिकेट खोजें

  3. Postgresql 9.3 में सभी भौतिक विचारों को एक साथ रीफ्रेश कैसे करें?

  4. NULL या IS NULL के साथ क्लॉज में

  5. पोस्टग्रेज - ट्रिगर के रूप में अपडेट स्टेटमेंट