在此表中@t:
s e Status
4 5 Available
6 7 Available
8 9 WL
10 11 Available
12 14 Available
我想返回如下数据集:
s e Status
4 7 Available
8 9 WL
10 14 Available
将我的状态列基本分为连续的集合,知道数据按s
及其后的每一行进行排序,则s
的值将比先前的e
的值大一个。 / p>
我认为我需要使用以下查询对数据进行分区:
select ROW_NUMBER() OVER (Partition by status, s order by s, e, status) As Row_number, *
from @t
order by s
但结果无法正确分区。
正确的语法是什么?
答案 0 :(得分:0)
这是一个空白和孤岛的问题。如果时间范围内没有间隔,则可以使用行号的差异:
select status, min(s) as s, max(e) as e
from (select t.*,
row_number() over (order by s) as seqnum,
row_number() over (partition by status order by s) as seqnum_s
from @t t
) t
group by status, (seqnum - seqnum_s)
order by min(s);
Here是db <>小提琴。