sql >> データベース >  >> RDS >> Sqlserver

SQLサーバーのウィンドウ移動平均

    ハードコーディングされた日付範囲をクエリから除外します。出力 (最後のサンプルのように) を一時テーブルに書き込みます (以下では #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 の間にどのようにあるかを確認してください。




    1. SQL ServerがNVarcharフィールドに日本語文字ではなく疑問符文字を格納するのはなぜですか?

    2. MySQLが起動しない

    3. SQL常時オン可用性グループ:コンピューターオブジェクト

    4. SUMによるMySQLグループ