期間と金額を含むデータベーステーブルがあります。それらを1日あたりの期間と価格のある契約と考えてください。
start | end | amount_per_day
2013-01-01 | 2013-01-31 | 100
2013-02-01 | 2013-06-30 | 200
2013-01-01 | 2013-06-30 | 100
2013-05-01 | 2013-05-15 | 50
2013-05-16 | 2013-05-31 | 50
各期間の合計を表示するクエリを作成したいと思います。つまり、次のようになります。
2013-01-01から2013-01-31までは、1番目と3番目の契約がアクティブであるため、1日あたりの合計金額は200です。2013-02-01から2013-04-30までは、2番目と3番目の行がアクティブです。 、したがって、合計は300です。2013-05-01から2013-05-15までは、2行目、3行目、および4行目がアクティブであるため、合計は350です。2013-05-16から2013-05-31まで、2番目の行は3行目と5行目がアクティブであるため、合計は再び350になります。最後に、2013-06-01から2013-06-30までは、2行目と3行目のみがアクティブであるため、合計は300に戻ります。
start | end | total_amount_per_day
2013-01-01 | 2013-01-31 | 200
2013-02-01 | 2013-04-30 | 300
2013-05-01 | 2013-05-31 | 350
2013-06-01 | 2013-06-30 | 300
(間隔を検出し、同じ合計を持ってそれらをマージする必要はありません2013-05-01 -> 2013-05-15
が2013-05-16 -> 2013-05-31
、それは素晴らしいことです)。
ポータブルソリューションをお勧めしますが、それが不可能な場合はSQLServerも機能します。
テーブルの構造に小さな変更を加えることができるので、クエリを簡単にする場合、たとえば、期間を終了日を排他的に指定することができます(したがって、最初の期間はstart = 2013-01-01、end = 2013-02-01)そのような提案をしてください。