【问题标题】:SQL Server GROUP BY COUNT Consecutive Rows OnlySQL Server GROUP BY COUNT 仅连续行
【发布时间】:2015-04-20 12:31:59
【问题描述】:

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

提前致谢。

【问题讨论】:

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


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2015-01-22
    相关资源
    最近更新 更多