首页 > 解决方案 > 根据开始和结束时间每分钟显示一行

问题描述

我有一张如下所示的表格:

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

我正在查看这个线程并试图模仿它,但我无法产生预期的结果。

任何和所有的帮助将不胜感激。

谢谢你们!

标签: mysqlsqldatetimesql-date-functionssqldatetime

解决方案


递归 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。


推荐阅读