我想比較本週(1至52)的數據與兩週前的數據。我需要確保在跨越新的一年邊界時,比較繼續進行。我有一個工作謂詞,如下所示:滑動周比較
WHERE (DATEPART(ww,MA.DateOpen) + 1) % 52 = DATEPART(ww,@ImportDate) - 1
上述邏輯有效,但它沒有考慮近似年份。換句話說,比較中將包括所有前幾年「X」周的不需要的數據。因此,謂詞必須擴展到多年,這又需要處理新的一年邊界:2012年第1周應該與2011年第51周進行比較。
如何在沒有詳細預測的情況下做到這一點?
更新: 由於需要將「每週」作爲週二到週二處理,所以此問題變得複雜。我目前的「正確」嘗試體現在下面的[VerboseCheck]案例中。
SET DATEFIRST 2
DECLARE @ImportDate date = '2011-1-4'
DECLARE @DateOpen date = '2010-12-20'
select @ImportDate,
YEAR(@DateOpen),
DATEPART(ww, @DateOpen),
YEAR(DATEADD(dd,-14,@ImportDate)),
DATEPART(ww,DATEADD(dd,-14,@ImportDate)),
CASE WHEN
YEAR(@DateOpen) + DATEPART(ww, @DateOpen) =
YEAR(DATEADD(dd,-14,@ImportDate)) + DATEPART(ww,DATEADD(dd,-14,@ImportDate))
THEN 1 ELSE 0 END [VerboseCheck],
CASE WHEN DATEDIFF (ww, @DateOpen, @ImportDate) =2
THEN 1 ELSE 0 END [SimpleCheck]
[SimpleCheck]是完美的,但它給出了與[VerboseCheck]不同的答案。如果我再提前@DateOpen一天,那麼這兩個人會給出相同的答案。這表明兩者都不以同樣的方式履行DATEFIRST評估。
我更新了我的問題以包含DATEFIRST問題,我認爲這個問題阻止DATEDIFF按照提議工作。 –
所以星期一應該定義一個星期而不是星期六 –
其實我檢查過,DateDiff尊重它,但星期二是星期一開始,但2011年有53個星期,當時你是'Datefirst = 2'肯定這應該是2011年的第51周,或者是(2011年的週數 - 1) –