2011-07-05 7 views
9

私はこの問題を解決しようとしましたが、まだそれを見つけることができませんでした。SQL Server今から過去4週間、昨年と同じ期間を選択してください

私はちょうどdate >= Dateadd(mm, -1, getdate())をしているので、問題ではない今日の日付から過去4週間のデータを選択する必要があります。しかし、前年と同じ4週間のデータが必要です。 2010年6月1日から30日まで、2011年6月1日から30日まで、私は必要としません。

2011年6月30日(木曜日)、7月1日の4週間前と4週間前の7月1日が木曜日前年と同じ週に

したがって、8週間のデータが返されます。

ありがとうございました!

+0

何ロジックは '6月30日/ 2011'の代わりに、' 7月7日/ 2011'を選択するために使用していますか? – JNK

+0

@JNK '7/1/2010'で、' 6/30/2011'から52週間を引くと '7/1/2010'になります。 – Fosco

答えて

15

あなたは前年に戻っていくつかのより多くのDATEADD()良さを使用することができます使用してその後...あなたが要求したとして、2011年6月30日に戻り2010年7月1日から

where theDate >= DATEADD(mm, -1, GETDATE())  
OR 
    (theDate <= DATEADD(week,-52,convert(datetime,GETDATE())) 
    and 
    theDate >= DATEADD(mm,-1,DATEADD(week,-52,convert(datetime,GETDATE())))) 

52週引くあなたそこから下限の1カ月元減算。

あなたはまた、数週間を使用するために全体を切り替えることができ...

where theDate >= DATEADD(week, -4, GETDATE())  
OR 
    (theDate <= DATEADD(week,-52,convert(datetime,GETDATE())) 
    and 
    theDate >= DATEADD(week,-56,convert(datetime,GETDATE()))) 
+0

+1 - 彼は一貫性のために月の代わりに週を使うべきです。 – JNK

+0

4週間ではなく最後の12週間を希望したらどうしますか? – Si8

+0

次に、2番目の例を使用して、-4を-12に、-56を-64に変更します。 – Fosco

0

あなたは条件BETWEEN論理和のシリアルを行うことがあります。

select 
    ... 
from 
    ... 
where 
    1=1 
    or date between Dateadd(mm, -2, getdate()) and Dateadd(mm, -1, getdate()) 
    or date between Dateadd(mm, -11, getdate()) and Dateadd(mm, -10, getdate()) 
order by 
    date 

iは、右理解したのですか?

+0

これは、4週間(2011年6月30日に終了する)と4週間(2010年7月1日に終了する)を選択して、上記のopの週の問題を処理するようには見えません。 – Fosco

関連する問題