首页 > 解决方案 > 显示日期之间跳过的 SQL 写入查询

问题描述

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

我试过了:

SELECT OrderDate FROM Orders

我得到了:

在此处输入图像描述

但我没有成功地将它们分成这样的差距:

在此处输入图像描述

我怎样才能做到这一点?

标签: sqlsql-servernorthwind

解决方案


使用可用于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);

推荐阅读