1

特定のデータ範囲の請求書を保存する請求書テーブルがあります(つまり、2012-01-01から2012-01-31までの日付の請求書1)。これで、請求書が関連付けられていない日が発生する可能性があるため、

> ID | START_DATE | END_DATE
> ---------------------------- 
> 1  | 2012-01-01 | 2012-01-31 
> 2  | 2012-02-05 | 2012-02-28

したがって、この場合、2月から5日間は、請求書が関連付けられません。最近はコストを見積もりたいので、どういうわけかこれらの欠落したデータ範囲を「取得」する必要があります。

同様の問題を抱えたSOに関するいくつかの回答を見てきましたが、それらのほとんどは、作成できない追加のカレンダーテーブルに依存しています。

他にSQLソリューションはありますか、それとも実際に請求書を取得してからアプリケーションのギャップを計算する方がよいでしょうか?

4

1 に答える 1

0

データセットに重複する日付がない場合、1つの解決策は、次のようなクエリを使用することです。これにより、欠落しているすべての範囲が抽出されます。

select
  r1.END_DATE + INTERVAL 1 DAY d1, MIN(r2.START_DATE) - INTERVAL 1 DAY d2
from
  ranges r1 INNER JOIN ranges r2
  ON r1.END_DATE <= r2.START_DATE
group by
  r1.END_DATE
having
  DATEDIFF(MIN(r2.START_DATE), r1.END_DATE) > 1

こちらのフィドルをご覧ください。

于 2013-03-26T08:49:04.030 に答える