次のクエリ例では、除外する範囲のセットも指定されている場合、それらの範囲の日付が重複している可能性がある場合、日付範囲の合計日数をカウントするための適切でパフォーマンスの高いアプローチは何ですか?
もっと簡単に言えば、請求がオフになっている一連の日付範囲のテーブルがあり、日付範囲(たとえば、Jan1〜Jan31)から始めて、その範囲で発生した請求可能な日数を判別する必要があります。単に日の日付の差から障害のある日の日付の合計を引いたものです。ただし、無効な日付範囲が重複する可能性があります。つまり、あるレコードではJan5-Jan8が無効になり、別のレコードではJan7-Jan10が無効になります。したがって、単純な合計ではJan7が2倍にカウントされます。これらの重複を除外し、精度カウントを取得するための最良の方法は何ですか。
Declare @disableranges table (disableFrom datetime, disableTo datetime)
insert into @disableranges
select '01/05/2013', '01/08/2013' union
select '01/07/2013', '01/10/2013' union
select '01/15/2013', '01/20/2013'
declare @fromDate datetime = '01/01/2013'
declare @toDate datetime = '01/31/2013'
declare @totalDays int = DATEDIFF(day,@fromDate,@toDate)
declare @disabledDays int = (0 /*not sure best way to calc this*/)
select @totalDays - @disabledDays