SQL-可比较集中的分区

时间:2019-05-23 15:06:56

标签: sql sql-server

在此表中@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

但结果无法正确分区。

正确的语法是什么?

1 个答案:

答案 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 <>小提琴。