SQL Server GROUP BY COUNT只连续行

时间:2015-04-19 21:04:21

标签: sql sql-server sql-server-2008-r2

我在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()在连续的行中连接表,但我不确定如何从中获取计数。

提前致谢。

1 个答案:

答案 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