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つあります。
- FIRST_VALUEとLAST_VALUEは分析関数です 、グループではなく、ウィンドウまたはパーティションで機能します。ネストされたクエリを単独で実行して、その結果を確認できます。
-
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,