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

कॉलम फ़ील्ड के लिए दो पंक्तियों के बीच अंतर कैसे प्राप्त करें?

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


  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. जांचें कि क्या तालिका को OBJECTPROPERTY () के साथ SQL सर्वर में किसी विदेशी कुंजी द्वारा संदर्भित किया गया है

  3. DAY() SQL सर्वर में उदाहरण (T-SQL)

  4. SQL सर्वर समानांतर बैकअप पुनर्स्थापना -1

  5. इकाई डेटा ढांचे से ट्रिगर के बजाय तालिका में डालने पर त्रुटि