首页 > 解决方案 > MySQL - 如何根据行的值多次获取一行?

问题描述

我有一个这种格式的事件表:

ID | NAME | DATEFROM | DATEUNTIL
1 Event1 2019-12-01 2019-12-03
2 Event2 2019-12-07 2019-12-08
3 Event3 2019-12-11 2019-12-12

我需要检索所有事件,而不是DATEFROMand DATEUNTIL,它应该是这样的:

ID | NAME | DATE
1 Event1 2019-12-01
1 Event1 2019-12-02
1 Event1 2019-12-03
2 Event2 2019-12-07
2 Event2 2019-12-08
3 Event3 2019-12-11
3 Event3 2019-12-12

我应该使用什么查询?

提前谢谢了。

标签: mysqlsqlloopsdate

解决方案


如果您正在运行 MySQL 8.0,则可以使用递归 cte 执行此操作:

with recursive cte as (
    -- this is your anchor
    select id, name, datefrom, dateuntil from mytable
    union all
    -- expand the dataset by incrementing "datefrom" until it reaches "dateuntil"
    select id, name, datefrom + interval 1 day, dateuntil
    from cte
    where datefrom < dateuntil
)
select id, name, datefrom date from cte order by id, date

DB Fiddle 上的演示

编号 | 姓名 | 日期      
-: | :----- | :---------
 1 | 事件1 | 2019-12-01
 1 | 事件1 | 2019-12-02
 1 | 事件1 | 2019-12-03
 2 | 事件2 | 2019-12-07
 2 | 事件2 | 2019-12-08
 3 | 活动3 | 2019-12-11
 3 | 活动3 | 2019-12-12

推荐阅读