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;