次のような 3 つの列があります。
Column1 Date1 Date2
Test2 2012-06-10
Test8 2012-05-05 2012-06-10
まず、このデータ セットが与えられた場合の目的の出力について説明します。次のようになります。
Year Month Sum
2012 05 1
2012 06 2
2012 07 1
Column1 に数値が含まれている場合 (WHERE Column1 LIKE '%2%' などで見つけることができます)、この数値を Date1 の月の値に追加する必要があります。これは最初の行の場合です。つまり、月 06 と月 07 に 1 が追加されます。ただし、行 2 の場合、Date2 に日付がある場合、Date1 に 1 を追加するだけで、毎月Date2 に月を含めます。これが、05 と 06 に 1 を追加する理由です。
このクエリは INTERVAL 関数を使用すると思いますが、将来の月に値を追加する方法がわかりません。
アップデート:
@CraigRinger - もう一度説明します。Column1 の数値を使用して、Date1 の日付が何ヶ月先まで実行されるかを判断したいと思います。最初の行では、2012-06 から 2012-07 まで実行されます (Column1 に 2 があるため)。
Date2 はキャンセル日と見なすことができます。行 2 の場合、Date1 は 8 か月間継続しますが、(Date2 によって) キャンセルされるため、05 から 06 までしか実行されません。
つまり、クエリは、開始月 (Date1) と、終了日 (存在する場合は Date2) までのすべての月に 1 を追加する必要があります。
すべての行の月の合計がわかるように、これらの月ごとに 1 を追加したいと思います。これには、日付間隔 (Column1 の数値に等しい) を Date1 に追加し、これら 2 つの数値の間の日付から月を抽出し、それらに 1 を追加する必要があると思います。残念ながら、これを実装する最善の方法がわかりません。
今回も分かりやすく説明できてよかったです!