दिलचस्प पोस्ट
फ़ाइल में एक विशिष्ट पंक्ति के लिए लॉग को पुनः प्राप्त करें? UICollectionView – गतिशील सेल ऊंचाई? Tablefunc का उपयोग करते हुए एकाधिक कॉलम पर धुरी कैसे एक चर से गतिविधि को टुकड़ा पारित करने के लिए, और इसे वापस पास? प्रत्येक पट्टी पर pyplot.barh () के साथ बार के मान को कैसे प्रदर्शित किया जाए? डू-ऑल लूप में टाइमर पर जेबटन को अपडेट करना क्या एक XSLT नाम का तत्व है? कैसे एक पॉपुलर / एक सी # सरणी एक मूल्य के साथ instantiate? एक संपत्ति ExpandoObject पर मौजूद है या नहीं पता कैसे? Laravel 4 में BCrypt के बजाय SHA1 एन्क्रिप्शन का उपयोग कैसे करें? <Li> के अंदर स्वीकृत टैग क्या हैं? JTextField सीमित राशि राशि इनपुट और केवल संख्यात्मक स्वीकार करते हैं सी # HttpWebRequest आदेश निर्देशिका लिस्टिंग पाने के लिए स्ट्रैम को सरणी के साथ कनवर्ट करें Django फ़िल्टर – या?

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

मेरे पास इस तरह एक मेज है:

rowInt Value 2 23 3 45 17 10 9 0 .... 

कॉलम पंक्तिमंट वैल्यू पूर्णांक है, लेकिन समान वेतनमान के अनुक्रम में नहीं है मैं rowInt द्वारा मानों को सूचीबद्ध करने के लिए निम्नलिखित एसक्यूएल का उपयोग कर सकता हूं:

 SELECT * FROM myTable ORDER BY rowInt; 

यह rowInt द्वारा मूल्यों की सूची देगा इस तरह से परिणाम के साथ दो पंक्तियों के बीच मूल्य का अंतर कैसे प्राप्त कर सकते हैं:

 rowInt Value Diff 2 23 22 --45-23 3 45 -35 --10-45 9 0 -45 --0-45 17 10 10 -- 10-0 .... 

तालिका SQL 2005 (माइक्रोसॉफ्ट) में है

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

 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) 

संपादित करें: इसके बारे में सोचकर, चयन में एक सबक्वरी का उपयोग करना (एला क्वॉस्नोई का उत्तर) अधिक कुशल हो सकता है। मैं विभिन्न संस्करणों का परीक्षण करता हूं, और यह देखने के लिए निष्पादन की योजना देखता हूं कि आपके पास डेटा सेट के आकार पर सबसे अच्छा प्रदर्शन होगा …

 SELECT rowInt, Value, COALESCE( ( SELECT TOP 1 Value FROM myTable mi WHERE mi.rowInt > m.rowInt ORDER BY rowInt ), 0) - Value AS diff FROM myTable m ORDER BY rowInt 

यदि आप वास्तव में आदेशों के बारे में सुनिश्चित करना चाहते हैं, तो "Row_Number ()" का उपयोग करें और वर्तमान रिकॉर्ड के अगले रिकॉर्ड की तुलना करें ("पर" क्लॉज पर नज़दीकी नज़र रखना)

 T1.ID + 1 = T2.ID 

आप मूल रूप से "न्यूनतम" या "ऊपर" निर्दिष्ट किए बिना, वर्तमान पंक्ति के साथ अगली पंक्ति में शामिल हो रहे हैं यदि आपके पास रिकॉर्ड की एक छोटी संख्या है, "डम्स" या "क्वॉसनोई" द्वारा अन्य समाधान ठीक काम करेंगे।

 with T2 as ( select ID = ROW_NUMBER() over (order by rowInt), rowInt, Value from myTable ) select T1.RowInt, T1.Value, Diff = IsNull(T2.Value, 0) - T1.Value from ( SELECT ID = ROW_NUMBER() over (order by rowInt), * FROM myTable ) T1 left join T2 on T1.ID + 1 = T2.ID ORDER BY T1.ID 

क्या SQL सर्वर विश्लेषणात्मक कार्यों का समर्थन करता है?

 select rowint, value, value - lag(value) over (order by rowint) diff from myTable order by rowint / 

एसक्यूएल सर्वर 2012 और ऊपर का समर्थन लैग / लीड फ़ंक्शंस पिछले या बाद की पंक्ति तक पहुंचने के लिए एसक्यूएल सर्वर 2005 इस का समर्थन नहीं करता है (SQL2005 में आपको शामिल होने या कुछ और की जरूरत है)

इस डेटा पर एक एसक्यूएल 2012 उदाहरण

 /* Prepare */ select * into #tmp from ( select 2 as rowint, 23 as Value union select 3, 45 union select 17, 10 union select 9, 0 ) x /* The SQL 2012 query */ select rowInt, Value, LEAD(value) over (order by rowInt) - Value from #tmp 

लीड (वैल्यू) "ओवर" क्लॉज में दिए गए ऑर्डर के संबंध में अगली पंक्ति का मान वापस कर देगा।

 select t1.rowInt,t1.Value,t2.Value-t1.Value as diff from (select * from myTable) as t1, (select * from myTable where rowInt!=1 union all select top 1 rowInt=COUNT(*)+1,Value=0 from myTable) as t2 where t1.rowInt=t2.rowInt-1 

एकल कॉलम के 2 पंक्तियों के बीच दिनांक अंतर खोजने की क्वेरी

 SELECT Column name, DATEDIFF( (SELECT MAX(date) FROM table name WHERE Column name < b. Column name), Column name) AS days_since_last FROM table name AS b