SQL写查询显示日期之间的跳过

时间:2019-05-01 12:10:37

标签: sql sql-server northwind

我尝试编写一个查询,该查询将通过显示跳转开始之前的日期和跳转之后的第一个日期来查找跃点。

我尝试过:

SELECT OrderDate FROM Orders

然后我得到了

enter image description here

但是我没有成功将它们分成这样的缺口:

enter image description here

我该怎么做?

2 个答案:

答案 0 :(得分:3)

使用可以使用dense_rank()来生成序列。从日期中减去此日期后,您将确定相邻的连续日期。

所以:

select min(orderdate), max(orderdate)
from (select o.*, dense_rank() over (order by orderdate) as seqnum
      from orders o
     ) o
group by dateadd(day, -seqnum, orderdate)
order by min(orderdate);

您需要dense_rank(),因为您的数据重复。

编辑:

要查找跳转,请使用LEAD()

select dateadd(day, 1, orderdate),
       dateadd(day, -1, next_orderdate)
from (select orderdate, lead(orderdate) over (order by orderdate) as next_orderdate
      from (select distinct orderdate orders o) o
     ) o
where next_orderdate > dateadd(day, 1, orderdate);

答案 1 :(得分:0)

尝试一下:

with cte as (select ROW_NUMBER() OVER(ORDER BY OrderDate) as row_num,OrderDate from orders)
select 
curr.OrderDate as Gap_start, 
nex.OrderDate as Gap_end
from 
cte curr
left join
cte nex
on
curr.row_num = nex.row_num - 1;