我有一个可变长度的“学期”表,它们之间有可变中断,并且有一个约束,使得“start_date”总是大于之前的“end_date”:
id start_date end_date
-----------------------------
1 2012-10-01 2012-12-20
2 2013-01-05 2013-03-28
3 2013-04-05 2013-06-29
4 2013-07-10 2013-09-20
学生表如下,开始日期可能出现在给定学期内的任何时间:
id start_date n_weeks
-------------------------
1 2012-11-15 25
2 2013-02-12 8
3 2013-03-02 12
我试图通过加入“学期”的“学生”来计算“结束日期”,这考虑了学期之间的可变长度休息。
我可以绘制上一个学期的结束日期(即从上一行的 end_date 开始)并通过减法找到学期之间的天数,使用以下方法:
SELECT start_date
, end_date
, lag(end_date) OVER () AS prev_end_date
, start_date - lag(end_date) OVER () AS days_break
FROM terms
ORDER BY start_date;
显然,如果只有两个术语,只需在天数中添加“休息”(也许,转换为“周”) - 从而将“结束日期”延长相同的时间段。
但是如果给定学生的“n_weeks”跨越多个学期,那么如何构建这样的查询呢?
在过去的几天里,我一直把头撞在墙上,我将非常感谢任何人能够提供的任何帮助......
非常感谢。