私が役立つ場合は、UDFを使用して動的な日付範囲を生成します。タリーやデートテーブルでさえそのトリックを行います。
Declare @Date2 Date = GetDate()
Declare @Date1 Date = DateAdd(DAY,-49,@Date2)
Select DateR1=Cast(RetVal as Date)
,DateR2=Cast(DateAdd(DAY,6,RetVal) as Date)
From [dbo].[udf-Create-Range-Date](@Date1,@Date2,'WK',1)
Order By 1
戻り
DateR1 DateR2
2016-08-03 2016-08-09
2016-08-10 2016-08-16
2016-08-17 2016-08-23
2016-08-24 2016-08-30
2016-08-31 2016-09-06
2016-09-07 2016-09-13
2016-09-14 2016-09-20
2016-09-21 2016-09-27
UDF
CREATE FUNCTION [dbo].[udf-Create-Range-Date] (@DateFrom datetime,@DateTo datetime,@DatePart varchar(10),@Incr int)
Returns
@ReturnVal Table (RetVal datetime)
As
Begin
With DateTable As (
Select DateFrom = @DateFrom
Union All
Select Case @DatePart
When 'YY' then DateAdd(YY, @Incr, df.dateFrom)
When 'QQ' then DateAdd(QQ, @Incr, df.dateFrom)
When 'MM' then DateAdd(MM, @Incr, df.dateFrom)
When 'WK' then DateAdd(WK, @Incr, df.dateFrom)
When 'DD' then DateAdd(DD, @Incr, df.dateFrom)
When 'HH' then DateAdd(HH, @Incr, df.dateFrom)
When 'MI' then DateAdd(MI, @Incr, df.dateFrom)
When 'SS' then DateAdd(SS, @Incr, df.dateFrom)
End
From DateTable DF
Where DF.DateFrom < @DateTo
)
Insert into @ReturnVal(RetVal) Select DateFrom From DateTable option (maxrecursion 32767)
Return
End
-- Syntax Select * from [dbo].[udf-Create-Range-Date]('2016-10-01','2020-10-01','YY',1)
-- Syntax Select * from [dbo].[udf-Create-Range-Date]('2016-10-01','2020-10-01','DD',1)
-- Syntax Select * from [dbo].[udf-Create-Range-Date]('2016-10-01','2016-10-31','MI',15)
-- Syntax Select * from [dbo].[udf-Create-Range-Date]('2016-10-01','2016-10-02','SS',1)
EDIT必要に応じて - 参加
Select D.DateR1
,D.DateR2
,TotalSales = sum(S.Sales)
From MySalesData S
Join (
Select DateR1=Cast(RetVal as Date)
,DateR2=Cast(DateAdd(DAY,6,RetVal) as Date)
From [dbo].[udf-Create-Range-Date](@Date1,@Date2,'WK',1)
) D
on S.Date Between D.DateR1 and D.DateR2
01を経由してサンプルを
私はあなたがただTsqlのヘルプを求めていると仮定し、それがSSRSに向かうという事実は疑問に二次的なものです。まず、終了日から8週間分のデータが必要であることがわかっている場合は、開始日が不要なように聞こえます。開始日を8週間前に送信してから、ストアドプロシージャを「戻る」8週間にハードコードする必要はありません。または、入力パラメータとして返す終了日と週数を考慮してください。 – paulbarbin
また、前年と同じ8週間のセッションが必要であることを読んでいます。私はまだ開始と終了(または終了マイナス8週)と別のプロシージャまたはこれらの日付を求めて、1年を差し引いて同じ日付を尋ねるコードを呼び出すコードを払う(昨年) – paulbarbin
これは私が取り組んでいるダッシュボードレポートです。開始日は、レポートでさまざまな値を取得するために渡すパラメータです。もちろん、開始日は使用していません。終了日のパラメータ自体から8週間を考慮する必要があります。 @paulbarbin –