web-dev-qa-db-ja.com

過去3か月のデータを選択

日付が過去3か月のデータを選択する手助けが必要です。 (注:過去3か月、つまりDATEADD(MONTH, -3, GETDATE())は求めていません)

DATEADDメソッドを使用したくない理由は、このクエリが月の途中で実行される可能性があり、その時点までのデータを返さないようにするためです。

3
A.Cassin

この方法を使用して、3か月前の最初の日と前月の最終日を決定できます。

select DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-3, 0)   --First day of 3 months ago
select DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1) --Last Day of previous month

次に、それをwhere句で使用します。

declare @start date = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-3, 0)
declare @end date = DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1)

select *
from table
where dateField between @start and @end

dateFielddatetimeの場合は、秒を追加するか、日を追加して<オペランドを使用するだけで、最終日を見逃さないようにする必要があります

declare @start date = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-3, 0)
declare @end date = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)        --First day of current month

select *
from table
where dateField >=@start and dateField < @end
4
scsimon