根据开始和结束时间每分钟显示一行

Showing a row for every minute based on start and end time

我有一个 table,如下所示:

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

我正在看这个 thread 并试图模仿它,但我无法产生想要的结果。

我们将不胜感激。

谢谢大家!

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

Here 是一个 db<>fiddle.