mysql - 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
我需要检索所有事件,而不是DATEFROM
and 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
我应该使用什么查询?
提前谢谢了。
解决方案
如果您正在运行 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
编号 | 姓名 | 日期 -: | :----- | :--------- 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
推荐阅读
- java - 找不到方法输出字符串和包含字符串的文本文件的区别
- css - 以角度隐藏类
- docker - Docker 服务器无法将网络流量路由到容器?
- python - 如何将整数附加到Python中嵌套列表中的字符串元素
- python - 如何在 Sikuli python 上的现有 excel 中插入一列?
- javascript - 在 React 中将 Axios 数据映射到渲染之外
- php - 如何将一组复选框标签链接到相应的一组
- php - create() 函数不起作用并且不输出错误(Laravel)
- python - Python字符串操作将字符从一个位置移动到另一个位置
- ruby-on-rails - 附件文件更改后ActiveStorage blob被删除,如何处理?