mysql - 根据开始和结束时间每分钟显示一行
问题描述
我有一张如下所示的表格:
task_id start_date end_date
t1 2020-05-01 8:00:00 2020-05-01 9:45:00
t2 2020-05-01 8:30:00 2020-05-01 9:00:00
t3 2020-05-01 8:45:00 2020-05-01 9:30:00
我希望我的 SQL 输出根据开始和结束日期显示任务的每一分钟。因此,例如, t1 应该看起来像
task_id time
t1 2020-05-01 8:00:00
t1 2020-05-01 8:01:00
t1 2020-05-01 8:02:00
t1 2020-05-01 8:03:00
..... .....
t1 2020-05-01 9:45:00
同样, t2 看起来像
task_id time
t2 2020-05-01 8:30:00
t2 2020-05-01 8:31:00
t2 2020-05-01 8:32:00
t2 2020-05-01 8:33:00
..... .....
t2 2020-05-01 9:00:00
我正在查看这个线程并试图模仿它,但我无法产生预期的结果。
任何和所有的帮助将不胜感激。
谢谢你们!
解决方案
递归 CTE 如下所示:
with recursive cte as (
select task_id, start_date, end_date
from t
union all
select task_id, start_date + interval 1 minute, end_date
from cte
where start_date < end_date
)
select task_id, start_date
from cte;
这是一个 db<>fiddle。
推荐阅读
- url - 谷歌分析中我的网址中有两个反斜杠
- javascript - 高图。系列在钻取后具有相同的颜色
- python - 创建多个对象然后在 tkinter 中使用?
- postgresql - 即使添加了检查约束,附加分区也需要更多时间
- javascript - 使用空依赖数组时在 useEffect 中反应陈旧状态
- clickhouse - Clickhouse - 将 arrayMap 拆分为要排序的列
- c# - 在 C# 中使用密码短语解码私钥
- ios - 无法在 Xcode 主项目文件夹中创建文件或文件夹
- numpy - Numpy 将大整数保存为浮点数
- ajax - 将 Ajax 模式弹出窗口添加到另一个按钮