SQL - 识别连续的数据组

SQL - Identify Continuous groups of data

对于如下所示的 table,需要确定 D 列中某个值的连续出现。我有一个执行此操作的 C# 脚本,但如果有一个查询(或两个查询)会很棒-三个,基于可以实现此目的的温度 tables)。

C 列:只能有 0 或 1

SELECT   Column A,
         Column B,
         Column C
FROM     Table
ORDER BY Column A,
         Column B

样本Table数据:

Column A,Column B,Column C
Employee 1,Value 1,0
Employee 1,Value 2,0
Employee 1,Value 3,0
Employee 1,Value 4,1
Employee 1,Value 5,1
Employee 1,Value 6,1
Employee 1,Value 7,0
Employee 1,Value 8,0
Employee 1,Value 9,1
Employee 1,Value 10,1
Employee 1,Value 11,1
Employee 1,Value 12,1

预期结果(编辑:对 C 列进行了微小更改):

Column A, Start Value, End Value, Column C
Employee 1, Value 1, Value 1, 0
Employee 1, Value 2, Value 2, 0
Employee 1, Value 3, Value 3, 0
Employee 1, Value 4, Value 6, 3
Employee 1, Value 7, Value 7, 0
Employee 1, Value 8, Value 8, 0
Employee 1, Value 9, Value 12, 4

你可以用行号的不同来做到这一点。 运行 子查询,看看它是如何工作的:

select a, c, min(b), max(b)
from (select t.*,
             row_number() over (partition by a order by b) as seqnum_a,
             row_number() over (partition by a, c order by b) as seqnum_ac
      from t
     ) t
group by a, c, (seqnum_a - seqnum_ac);