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

तालिका में एक ही कॉलम के दो रिकॉर्ड घटाएं

score . में पंक्तियों के क्रम को निर्धारित करने के लिए आपको किसी तरह की आवश्यकता है . संबंधपरक डेटाबेस में किसी तालिका में कोई "प्राकृतिक क्रम" नहीं है। तो मुझे लगता है कि आपके पास एक id है (या टाइमस्टैम्प या कुछ और) आपके रिकॉर्ड को ऑर्डर करने के लिए। या i . है हर नई पंक्ति में बड़ा होने की गारंटी? तब आप केवल i . द्वारा ऑर्डर कर सकते हैं ।

क्वेरी अपने आप में सरल है - एक बार जब आपको window के बारे में पता चल जाए कार्य :

SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM   score
ORDER  BY id;

@Clodoaldo द्वारा सुधार सहित (टिप्पणी देखें)।

lag(i, 1, 0) OVER (ORDER BY id)

के बराबर है, लेकिन इससे अधिक सुंदर है:

COALESCE(lag(i) OVER (ORDER BY id), 0)

उद्देश्य पहली पंक्ति के विशेष मामले को कवर करना है जिसमें कोई पिछली पंक्ति नहीं है।
sqlfiddle पर डेमो।

sum(result) तुच्छ है क्योंकि यह पिछले i . के बराबर होने के लिए बाध्य है आपके विवरण के अनुसार:

SELECT i
FROM   score
ORDER  BY id DESC
LIMIT  1;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL डेटाबेस मॉनिटरिंग:मॉनिटर करने के लिए टिप्स

  2. मैं PostgreSQL 9.1+ में मॉड्यूल कैसे आयात करूं या एक्सटेंशन कैसे स्थापित करूं?

  3. PostgreSQL में एकाधिक डालने से कैसे बचें

  4. तालिका विदेशी कुंजियों को कैसे सूचीबद्ध करें

  5. PostreSQL 10 Linux के लिए Windows सबसिस्टम पर चलने वाले Ubuntu 18.04 पर प्रारंभ करने में विफल रहता है