sql - mySQL 查找连续日期
问题描述
给定具有以下列 (int)id, (DATE)beginDay, (DATE)endDay 的数据库
找到正好相隔 1 天的连续天,并输出 beginDay 和 endDay
IE
1 | 2011-01-01 2011-01-02
2 | 2011-01-02 2011-01-03
3 | 2011-01-03 2011-01-07
4 | 2011-02-12 2011-02-13
打印
2011-01-01 2011-01-03
2011-02-12 2011-02-13
解决方案
这是一种差距和孤岛问题。您可以通过从日期中减去一系列值来解决它 - 当日期连续时,差异是恒定的。
如果您正在查看beginday
,您可以使用:
select min(beginday), max(beginday)
from (select t.*,
row_number() over (order by beginday) as seqnum
from t
) t
group by beginday - interval seqnum day;
如果你关心endday
,你可以使用:
select t.*
from t
where endday = begindate + interval 1 day;
推荐阅读
- pandas - Pandas:使用一列的值根据两列计算表中的行数
- javascript - 如何使用 vanilla Java Script 仅显示所需部分并隐藏所有其他部分?
- c# - 在 HTML 中显示数组中的数组
- r - 从 DF 中的开始日期为每个 Id 分配每月日期记录
- html - HTML 图像不会链接到页面
- mongodb - 如何使用 docker-compose 使用 mongo 容器设置身份验证和副本集?
- node.js - 如何在mongodb中使用promise显示数据
- python - Python多重继承超级方法调用
- angular - .map 无法从 HttpClient 访问
- c++ - 提高主要目标引用中递归的构建错误