sql - 显示日期之间跳过的 SQL 写入查询
问题描述
我尝试编写一个查询,通过显示跳转开始前的日期和跳转后的第一个日期来查找跃点。
我试过了:
SELECT OrderDate FROM Orders
我得到了:
但我没有成功地将它们分成这样的差距:
我怎样才能做到这一点?
解决方案
使用可用于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);
推荐阅读
- react-native - 升级 React Native 后无法读取未定义错误的属性“缓存”
- php - 从高到低排序 SQL PHP
- python - 托管在不同服务器上的两个 Python 应用程序如何通信?
- ruby - Ruby 解析无效的 JSON
- json - 如何在 PostgreSQL 中解析这个 JSON 字段?
- r - R在使用带有xlim的基本图时如何自动调整y轴
- javascript - 变量和 if 语句在 Javascript 中产生错误
- java - 在带有 appengine-maven-plugin 的 appengine 上的多模块 maven java 项目中部署期间跳过某些模块
- javascript - 如何获取特定列标题过滤器的 dataFiltered-Callback?
- r - RStudio 警告消息:(来自记忆):as_tibble 正在改变..请使用