我在Microsoft SQL Server 2008 R2上有一个名为DATA的表,其中包含三个不可为空的整数字段:ID,Sequence和Value。具有相同ID的序列值将是连续的,但可以以任何值开头。我需要一个查询,它将返回具有相同ID和值的连续行的计数。
例如,假设我有以下数据:
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()在连续的行中连接表,但我不确定如何从中获取计数。
提前致谢。
答案 0 :(得分: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。