「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;
明らかに、用語が 2 つしかない場合は、単純に「休憩」を日数で追加するだけで済み (おそらく「週」にキャスト)、それによって「end_date」が同じ期間だけ延長されます。
しかし、特定の学生の「n_weeks」が複数のタームにまたがる必要がある場合、そのようなクエリをどのように構造化できますか?
ここ数日間、頭を壁にぶつけていました。誰かが提供できる助けがあれば、非常に感謝しています....
どうもありがとう。