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;
给定一个数据库,其中包含以下列 (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;