2015-04-19 12 views
7

Mam tabelę o nazwie DATA na serwerze Microsoft SQL Server 2008 R2 z trzema nieululującymi w stan liczbami całkowitymi polami: identyfikator, sekwencja i wartość. Wartości sekwencji o tym samym identyfikatorze będą następujące po sobie, ale mogą zaczynać się od dowolnej wartości. Potrzebuję zapytania, które zwróci liczbę kolejnych wierszy z tym samym identyfikatorem i wartością.GRUPA SQL Server PRZEZ COUNT Kolejne wiersze Tylko

Na przykład, powiedzmy, że mam następujące dane:

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

Chcę następujący wynik:

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

próbowałem

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

ale który daje

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

grupująca wszystkie wiersze o tych samych wartościach, a nie tylko kolejne wiersze.

Wszelkie pomysły? Z tego, co widziałem, uważam, że muszę odejść dołączyć do stołu sam w kolejnych wierszach za pomocą ROW_NUMBER(), ale nie jestem pewien dokładnie, jak uzyskać zliczenia z tego.

Z góry dziękuję.

+2

Sprawdź [luki i wyspy] (http://stackoverflow.com/questions/tagged/gaps-and-islands) –

Odpowiedz

9

Można użyć Sequence - ROW_NUMBER() OVER (ORDER BY ID, Val, Sequence) AS g utworzyć grupę:

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 

proszę zobaczyć skrzypce here.