PostgreSQL-使用子查询生成序列

PostgreSQL-使用子查询生成序列,sql,database,postgresql,date,series,Sql,Database,Postgresql,Date,Series,使用PostgreSQL,我需要完成以下场景。我有一个名为routine的表,我在其中存储start_date和end_date列。我有另一个表叫做exercises,在这里我存储了与每个练习相关的所有数据,最后,我有一个表叫做routine\u exercise,在这里我创建了例程和练习之间的关系。每个例行程序可以有七天(一天表示一周中的某一天,例如:1表示星期一等)的锻炼,每天可以有一次或多次锻炼。例如: 练习表 练习ID 名称 1. 练习1 2. 练习2 3. 练习3 您可以使用gener

使用PostgreSQL,我需要完成以下场景。我有一个名为routine的表,我在其中存储start_date和end_date列。我有另一个表叫做exercises,在这里我存储了与每个练习相关的所有数据,最后,我有一个表叫做routine\u exercise,在这里我创建了例程和练习之间的关系。每个例行程序可以有七天(一天表示一周中的某一天,例如:1表示星期一等)的锻炼,每天可以有一次或多次锻炼。例如:

练习表

练习ID 名称 1. 练习1 2. 练习2 3. 练习3
您可以使用
generate_series
生成开始和结束输入日期之间的日期,然后使用
routine_练习表执行
left join
,如下所示:

SELECT t.d, re.day
  FROM generate_series(timestamp '2020-03-25', timestamp '2020-05-25',
                       interval  '1 day') AS t(d)
  left join (select distinct day from Routine_Exercise re WHERE ROUTINE_ID = 1) re
    on mod(extract(day from (t.d -timestamp '2020-03-25')), 7) + 1 = re.day;

谢谢你的回复,这只适用于前七张唱片。它应该从开始日期到结束日期重复相同的模式。例如,该日期(2020-04-01)应为第1天,以此类推。你知道如何实施吗?再一次,谢谢你,它真的帮助了我。我的坏!!现在查看更新的答案!!非常感谢,它工作得非常好。非常好的解决方案,性能非常好!