ハードコーディングされた日付範囲をクエリから除外します。出力 (最後のサンプルのように) を一時テーブルに書き込みます (以下では #visits と呼びます)。
この一時テーブルへの自己結合を試してください:
list.dtadmission 、 Avg として AVG(data.nvisits) 、 sum として SUM(data.nvisits) 、 RollingDayCount として COUNT(data.nvisits) 、 Verifymindate として MIN(data.dtadmission) 、 MAX(data .dtadmission) as Verifymaxdate from #visits as list inner join #visits as data on list.dtadmission と DATEADD(DD,6,data.dtadmission) group by list.dtadmission の間
プレ>編集: あなたの質問に答えるには、コメント欄に十分なスペースがありませんでした:
私の結合は、結合制約で between を使用するため、「ちょっとデカルト」です。リスト内の各レコードは他のすべてのレコードに対して上昇しています。次に、報告する日付が下限 (-7) 日と今日の間にあるレコードが必要です。すべてのデータの日付は日付をリストするために利用できます。これがあなたの質問の鍵です。結合条件を次のように書くこともできました
DATEADD(DD,-6,data.dtadmission) と data.dtadmission の間の list.dtadmission
プレ>しかし、実際に起こったことは、
としてテストしたことです。DATEADD(DD,6,data.dtadmission) と data.dtadmission の間の list.dtadmission
プレ>構文が「LOW と HIGH の間」であるため、レコードは返されません。 0 件のレコードに顔をしかめ、引数を交換しました。それだけです。
次のことを試してみてください。意味を理解してください:これは 1 つの listdate のデカルト結合です:
SELECT list.[dtAdmission] as listdate ,data.[dtAdmission] as datadate ,data.nVisits as datadata ,DATEADD(dd,6,list.dtadmission) as listplus6 ,DATEADD(dd,6,data. dtAdmission ) として [sandbox].[dbo].[admAvg] からの datapplus6 をリスト内部結合 [sandbox].[dbo].[admAvg] を 1=1 のデータとして list.dtAdmission ='5-Jan-2011'コード> プレ>
これを実際の結合条件と比較してください
SELECT list.[dtAdmission] as listdate ,data.[dtAdmission] as datadate ,data.nVisits as datadata ,DATEADD(dd,6,list.dtadmission) as listplus6 ,DATEADD(dd,6,data. dtAdmission ) as datapplus6from [sandbox].[dbo].[admAvg] as list inner join [sandbox].[dbo].[admAvg] as data on list.dtadmission between data.dtadmission と DATEADD(DD,6,data.dtadmission) ) where list.dtAdmission ='2011 年 1 月 5 日'
プレ>リストの日付がすべてのレコードで datadate と dataplus6 の間にどのようにあるかを確認してください。