首页 > 解决方案 > 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

标签: sqlmysql-workbench

解决方案


这是一种差距和孤岛问题。您可以通过从日期中减去一系列值来解决它 - 当日期连续时,差异是恒定的。

如果您正在查看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;

推荐阅读