SELECT
[current].rowInt,
[current].Value,
ISNULL([next].Value, 0) - [current].Value
FROM
sourceTable AS [current]
LEFT JOIN
sourceTable AS [next]
ON [next].rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > [current].rowInt)
संपादित करें:
इसके बारे में सोचकर, चयन में एक सबक्वायरी का उपयोग करना (एला क्वास्नोई का जवाब) अधिक कुशल हो सकता है। मैं विभिन्न संस्करणों का परीक्षण करूंगा, और निष्पादन योजनाओं को यह देखने के लिए देखूंगा कि आपके पास मौजूद डेटा सेट के आकार पर कौन सबसे अच्छा प्रदर्शन करेगा...
EDIT2:
मुझे अभी भी यह बढ़ते हुए वोट दिखाई दे रहे हैं, हालांकि इसकी संभावना नहीं है कि बहुत से लोग अभी भी SQL Server 2005 का उपयोग करते हैं।
यदि आपके पास Windowed Functions जैसे LEAD()
. तक पहुंच है , तो उसके बजाय उसका उपयोग करें...
SELECT
RowInt,
Value,
LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value
FROM
sourceTable