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
Een oplossing die dicht bij uw huidige ligt. Er zijn twee plaatsen die je verkeerd hebt gedaan.
- FIRST_VALUE EN LAST_VALUE zijn Analytische functies , die werken op een raam of partitie, in plaats van op een groep. U kunt de geneste query alleen uitvoeren en het resultaat bekijken.
-
LAST_VALUE is de laatste waarde van het huidige venster, die niet is opgegeven in uw zoekopdracht, en een standaardvenster is rijen van de eerste rij van de huidige partitie tot huidige rij . U kunt FIRST_VALUE gebruiken met de volgorde voor het verwijderen van zaden of een venster specificeren
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,