दिलचस्प पोस्ट
हर प्रोग्राम में लिखने के लिए एंड्रॉइड डेवलपमेंट के लिए अपनी खुद की लाइब्रेरी कैसे तैयार की जाए? एंड्रॉइड में मैं एक क्षैतिज सूचीदृश्य कैसे बना सकता हूं? वास्तव में "जैसा-अगर" नियम क्या है? ग्रहण त्रुटि: "आयात XXX को हल नहीं किया जा सकता" java.lang.IllegalArgumentException: अवैध <url-pattern> सर्वलेट मैपिंग में निर्भरता के साथ मेवेन 2 विधानसभा: "प्रणाली" के तहत जार शामिल नहीं है क्या करता है '?' सी ++ में करते हैं? बहु-लाइन खोज के लिए रेगेक्स (जीआरपी) की आवश्यकता क्या PHP में स्थिर कक्षाएं बनाना संभव है (जैसे सी #)? MVVM लाइट टूलकिट का उपयोग करके नई विंडो कैसे खोलें ट्विटर छवि एन्कोडिंग चुनौती क्यों नहीं अहस्ताक्षरित इं एसएलएस शिकायत नहीं है? एचटीटीपीएस पर @ फ़ॉन्ट चेहरा ईओटी लोड नहीं हो रहा है pysqlite: स्तंभ या मेज के नाम के लिए प्लेसहोल्डर प्रतिस्थापन? विंडोज बैच चर सेट नहीं करेंगे

केवल पंक्तियों द्वारा एसक्यूएल समूह जो अनुक्रम में हैं

कहो मेरे पास निम्न तालिका है:

MyTable --------- | 1 | A | | 2 | A | | 3 | A | | 4 | B | | 5 | B | | 6 | B | | 7 | A | | 8 | A | --------- 

निम्नलिखित की आउटपुट करने के लिए मुझे एसक्यूएल क्वेरी की आवश्यकता है:

 --------- | 3 | A | | 3 | B | | 2 | A | --------- 

असल में मैं एक group by कर रहा हूं, लेकिन केवल उन पंक्तियों के लिए जो अनुक्रम में एक साथ हैं कोई विचार?

ध्यान दें कि डेटाबेस एसक्यूएल सर्वर 2008 पर है। इस विषय पर एक पद है, हालांकि यह ओरेकल के अंतराल () फ़ंक्शन का उपयोग करता है।

वेब के समाधान से एकत्रित समाधान "केवल पंक्तियों द्वारा एसक्यूएल समूह जो अनुक्रम में हैं"

इसे "द्वीपों" समस्या के रूप में जाना जाता है इज़जिक बेन गण के दृष्टिकोण का उपयोग करना:

 ;WITH YourTable AS ( SELECT 1 AS N, 'A' AS C UNION ALL SELECT 2 AS N, 'A' AS C UNION ALL SELECT 3 AS N, 'A' AS C UNION ALL SELECT 4 AS N, 'B' AS C UNION ALL SELECT 5 AS N, 'B' AS C UNION ALL SELECT 6 AS N, 'B' AS C UNION ALL SELECT 7 AS N, 'A' AS C UNION ALL SELECT 8 AS N, 'A' AS C ), T AS (SELECT N, C, DENSE_RANK() OVER (ORDER BY N) - DENSE_RANK() OVER (PARTITION BY C ORDER BY N) AS Grp FROM YourTable) SELECT COUNT(*), C FROM T GROUP BY C, Grp ORDER BY MIN(N) 

यह आपके लिए काम करेगा …

 SELECT Total=COUNT(*), C FROM ( SELECT NGroup = ROW_NUMBER() OVER (ORDER BY N) - ROW_NUMBER() OVER (PARTITION BY C ORDER BY N), N, C FROM MyTable )RegroupedTable GROUP BY C,NGroup 

मज़े के लिए, किसी भी एसक्यूएल-विशिष्ट फ़ंक्शन के बिना और यह मानते हुए कि आईडी कॉलम मोनोटोनिक रूप से बढ़ रहा है:

 WITH starters(name, minid, maxid) AS ( SELECT a.name, MIN(a.id), MAX(a.id) FROM mytable a RIGHT JOIN mytable b ON (a.name <> b.name AND a.id < b.id) WHERE a.id IS NOT NULL GROUP BY a.name ), both(name, minid, maxid) AS ( SELECT name, minid, maxid FROM starters UNION ALL SELECT name, MIN(id), MAX(id) FROM mytable WHERE id > (SELECT MAX(maxid) from starters) GROUP BY name ) SELECT COUNT(*), m.name, minid FROM both INNER JOIN mytable m ON id BETWEEN minid AND maxid GROUP BY m.name, minid 

परिणाम (मिडिड कॉलम की उपेक्षा करें):

 (No column name) name minid 3 A 1 3 B 4 2 A 7