mySQL 查找连续的日期

mySQL Find consecutive dates

给定一个数据库,其中包含以下列 (int)id、(DATE)beginDay、(DATE)endDay

找出恰好相隔 1 天的连续几天,并输出 beginDay 和 endDay

 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;