MySQL为日期范围的每一天选择日期范围的行

问题描述 投票:0回答:1

我有一个表,其中包含事件的范围是这样的:

id | title | start      | end
1  | Lorem | 2019-11-02 | 2019-11-03
2  | Ipsum | 2019-11-02 | 2019-11-02
3  | Dolor | 2019-11-08 | 2019-11-10
4  | Amet  | 2019-11-02 | 2019-11-04

我想选择所有行,但要加入该范围内的日期,因此我可以为其范围内每天的每个事件设置X行。结果应该来自我的示例表:

date        | id | title | start      | end
2019-11-02  | 1  | Lorem | 2019-11-02 | 2019-11-03
2019-11-02  | 2  | Ipsum | 2019-11-02 | 2019-11-02
2019-11-02  | 4  | Amet  | 2019-11-02 | 2019-11-04
2019-11-03  | 1  | Lorem | 2019-11-02 | 2019-11-03
2019-11-03  | 4  | Amet  | 2019-11-02 | 2019-11-04
2019-11-04  | 4  | Amet  | 2019-11-02 | 2019-11-04
2019-11-08  | 3  | Dolor | 2019-11-08 | 2019-11-10
2019-11-09  | 3  | Dolor | 2019-11-08 | 2019-11-10
2019-11-10  | 3  | Dolor | 2019-11-08 | 2019-11-10

我真的很困惑,不知道是否有可能。...谢谢您的帮助!我使用的是MySQL 5.7

mysql date
1个回答
0
投票

如果您正在运行MySQ 8.0,则这是直接的递归查询:

with recursive cte as (
    select start as date, id, title, start, end from mytable
    union all
    select date + interval 1 day, id, title, start, end from cte where date < end
)
select * from cte
order by date, id

Demo on DB Fiddle

日期| id |标题|开始结束:--------- | -:| :---- | :--------- | :---------2019-11-02 | 1 |洛雷姆| 2019-11-02 | 2019-11-032019-11-02 | 2 |益普生| 2019-11-02 | 2019-11-022019-11-02 | 4 | Amet | 2019-11-02 | 2019-11-042019-11-03 | 1 |洛雷姆| 2019-11-02 | 2019-11-032019-11-03 | 4 | Amet | 2019-11-02 | 2019-11-042019-11-04 | 4 | Amet | 2019-11-02 | 2019-11-042019-11-05 | 3 | Dolor | 2019-11-05 | 2019-11-082019-11-06 | 3 | Dolor | 2019-11-05 | 2019-11-082019-11-07 | 3 | Dolor | 2019-11-05 | 2019-11-082019-11-08 | 3 | Dolor | 2019-11-05 | 2019-11-08
© www.soinside.com 2019 - 2024. All rights reserved.