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
आपके वर्तमान के करीब एक समाधान। आपने दो जगहों पर गलत किया है।
- 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,