दिलचस्प पोस्ट
JasperReports में टेक्स्ट फ़ील्ड को स्टाइल करें jquery datepicker का उपयोग करके एक दिन में एक दिन कैसे जोड़ना एक पाठ फ़ाइल लाइन-बाय-लाइन को पढ़ने का सबसे तेज़ तरीका क्या है? क्या कोई एओआईएसक्यूएल डाटा स्टोर है जो एसिड के अनुरूप है? MongoDB $ gt / $ lt ऑपरेटरों को तार के रूप में संग्रहीत कीमतों के साथ जावा में विश्वसनीय और तेजी से एफएफटी एंड्रॉइड बिल्ड टूल्स को अद्यतन करने के बाद असंगत क्लास चेंज त्रुटि 25.1.6 जीसीएम / एफसीएम लोडर मैनेजर द्वारा प्रबंधित कस्टम एडेप्टर के साथ अल्फाबेट इंडेक्सर मैं एक (यूनिक्स) शैल स्क्रिप्ट में JSON को बहुत प्रिंट कैसे कर सकता / सकती हूं? "एमवीएन तैनात" के बीच स्थानीय रेपो और "एमवीएन इंस्टॉल" में क्या अंतर है? जावास्क्रिप्ट से PHP पर JSON डेटा भेजें? नेटयूआईएचएंडडीएंड और डायरेक्टयूआईएचडब्ल्यूएनड मैं जावा में जावा का उपयोग कैसे कर सकता हूं? एनएटी में विधानसभा बाँध विफलता प्रवेश (फ्यूजन) को कैसे सक्षम करें स्टैक ऑब्जेक्ट्स के साथ "डिलीट" का व्यवहार क्या है?

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

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

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