从多个日期范围(事件)中选择使用的天数

时间:2018-01-02 14:43:00

标签: mysql

我有多个平均数据库。

StartDate      EndDate
-----------------------------
2017-03-18     2017-03-20
2017-10-10     2017-10-10
2017-11-30     2017-12-01

我需要的是获取看起来像的使用日期列表:

2017-03-18
2017-03-19
2017-03-20
2017-10-10
2017-11-30
2017-12-01

这些事件可能非常多,而且可能会重叠,因此查询必须非常快,并且记录按日期分组。如果选择未使用的天数会更快,那就无所谓了。我只需要找出当年的哪些日子被使用。

1 个答案:

答案 0 :(得分:1)

最简单的方法是让自己成为dates表,每天都有一行。

然后你可以这样做

 SELECT DISTINCT d.day
   FROM dates d
   JOIN mytable t ON d.day >= t.StartDate AND d.day <= t.EndDate
  ORDER BY d.day

并获取所有日期的枚举,以满足您的需求。

有很多方法可以动态生成dates表,但它们是一个臭名昭着的痛苦。你可能想要查找那种东西。

(无耻的自我宣传......这是一种可行的方式。https://www.plumislandmedia.net/mysql/filling-missing-data-sequences-cardinal-integers/