0

SSRSレポートを作成しています。

レポートでは、週は常に月曜日から日曜日まで実行されます。
そして、過去2週間の開始日と終了日を知りたいです。

例えば、

現在の日付=2011年1月1日
-現在の週=2010年12月27日から2011年1月2日
-前の週=2010年12月20日から2010年12月26日

以下を試しましたが、当日=日曜日の場合は失敗するようです

DECLARE @DT DATETIME
DECLARE @Offset INT
DECLARE @CM DATETIME
DECLARE @PM DATETIME
DECLARE @PS DATETIME

--SET @DT = GETDATE()
SET @DT = '11/14/2010' -- Monday
SET @Offset = (DATEPART(WEEKDAY, @DT) - 2) * -1
SET @CM = DATEADD(DAY, @Offset, @DT)
SET @PM = DATEADD(DAY, -7, @CM)
SET @PS = DATEADD(DAY, -1, @CM)

SELECT @Offset AS Offset, @DT AS Date, @CM AS Monday, @PM AS [Previous Monday], @PS AS [Previous Sunday], DATEPART(WK, @PM) AS Week

どうすれば修正できますか?

4

2 に答える 2

2

[Calendar]事前に計算する必要のあるすべての日付を含むテーブルをDBに追加します。次に、曜日の名前、番号、休日などのフィールドを含めて、必要な値を検索するだけです。

遊ぶよりもずっと簡単ですDATEADD

カレンダテーブルに関する有用な記事:なぜ補助カレンダテーブルの使用を検討する必要があるのですか?

于 2011-01-10T22:55:32.660 に答える
1

これが最も洗練されたソリューションであるかどうかはわかりませんが、@offsetを使用して次のようにcaseステートメントを実行できます。

SET @offset = CASE WHEN DATEPART(weekday, @today) >= 2
                  THEN -(DATEPART(weekday, @today) - 2)
                  ELSE -(DATEPART(weekday, @today) + 5)
               END

私はそれがすべての場合に機能すると信じています。

于 2011-01-10T23:16:09.600 に答える