2015-04-19 7 views
7

मेरे पास माइक्रोसॉफ्ट एसक्यूएल सर्वर 2008 आर 2 पर डेटा को तीन गैर-नलबल पूर्णांक फ़ील्ड: आईडी, अनुक्रम, और मान के साथ डेटा कहा जाता है। एक ही आईडी के साथ अनुक्रम मूल्य लगातार जारी रहेगा, लेकिन किसी भी मूल्य से शुरू हो सकता है। मुझे एक प्रश्न की आवश्यकता है जो एक ही आईडी और वैल्यू के साथ लगातार पंक्तियों की गिनती वापस कर देगी।COUNT कॉन्सेक्टीव पंक्तियों द्वारा SQL सर्वर समूह केवल

ID Sequence Value 
-- -------- ----- 
1   1  1 
5   1 100 
5   2 200 
5   3 200 
5   4 100 
10  10  10 

मैं निम्नलिखित परिणाम चाहते हैं:

ID Start Value Count 
-- ----- ----- ----- 
1  1  1  1 
5  1 100  1 
5  2 200  2 
5  4 100  1 
10 10  10  1 

मैंने कोशिश की

SELECT ID, MIN([Sequence]) AS Start, Value, COUNT(*) AS [Count] 
FROM DATA 
GROUP BY ID, Value 
ORDER BY ID, Start 

लेकिन वह

देता

उदाहरण के लिए, मान लीजिए कि मैं निम्न डेटा डालते हैं

ID Start Value Count 
-- ----- ----- ----- 
1  1  1  1 
5  1 100  2 
5  2 200  2 
10 10  10  1 

जो सभी पंक्तियों को समान मूल्यों के साथ समूहित करता है, न केवल लगातार पंक्तियों।

कोई विचार? मैंने जो देखा है, उससे मेरा मानना ​​है कि मुझे ROW_NUMBER() का उपयोग करके लगातार पंक्तियों पर तालिका में शामिल होना है, लेकिन मुझे यकीन नहीं है कि इससे कैसे गणना की जा सकती है।

अग्रिम धन्यवाद।

+2

देखो [अंतराल और द्वीप] (http://stackoverflow.com/questions/tagged/gaps-and-islands) –

उत्तर

9

आप एक समूह बनाने के लिए Sequence - ROW_NUMBER() OVER (ORDER BY ID, Val, Sequence) AS g उपयोग कर सकते हैं:

SELECT 
    ID, 
    MIN(Sequence) AS Sequence, 
    Val, 
    COUNT(*) AS cnt 
FROM 
(
    SELECT 
    ID, 
    Sequence, 
    Sequence - ROW_NUMBER() OVER (ORDER BY ID, Val, Sequence) AS g, 
    Val 
    FROM 
    yourtable 
) AS s 
GROUP BY 
    ID, Val, g 

कृपया एक बेला here देखते हैं।

संबंधित मुद्दे