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

FIRST_VALUEおよびLAST_VALUEでのGROUPBYの使用

    SELECT 
        MIN(MinuteBar) AS MinuteBar5,
        Opening,
        MAX(High) AS High,
        MIN(Low) AS Low,
        Closing,
        Interval
    FROM 
    (
        SELECT FIRST_VALUE([Open]) OVER (PARTITION BY DATEDIFF(MINUTE, '2015-01-01 00:00:00', MinuteBar) / 5 ORDER BY MinuteBar) AS Opening,
               FIRST_VALUE([Close]) OVER (PARTITION BY DATEDIFF(MINUTE, '2015-01-01 00:00:00', MinuteBar) / 5 ORDER BY MinuteBar DESC) AS Closing,
               DATEDIFF(MINUTE, '2015-01-01 00:00:00', MinuteBar) / 5 AS Interval,
               *
        FROM #MinuteData
    ) AS T
    GROUP BY Interval, Opening, Closing
    

    現在のソリューションに近いソリューション。間違えた場所は2つあります。

    1. FIRST_VALUEとLAST_VALUEは分析関数です 、グループではなく、ウィンドウまたはパーティションで機能します。ネストされたクエリを単独で実行して、その結果を確認できます。
    2. LAST_VALUEは、クエリで指定されていない現在のウィンドウの最後の値であり、デフォルトのウィンドウは、現在のパーティションの最初の行から現在の行までの行です。 。シード解除の順序でFIRST_VALUEを使用するか、ウィンドウを指定することができます

      LAST_VALUE([Close]) OVER (PARTITION BY DATEDIFF(MINUTE, '2015-01-01 00:00:00', MinuteBar) / 5 
                  ORDER BY MinuteBar 
                  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS Closing,
      


    1. 「読み取り専用」データベースを縮小できない| AlwaysOn可用性グループの使用中にトランザクションログを縮小する

    2. ClearDBでMySQLエンジンのバージョンを更新するにはどうすればよいですか?

    3. 読み取りと書き込みを多用するアプリケーションの場合、URLをmysqlに保存するための最良の方法

    4. mysqlの結果セットは常にnullです