मुझे लगता है कि आप अधिक जटिल थिन हैं।
आप GROUP BY (DATEDIFF(MINUTE, '2017-01-01', TheDateTime) / 30
का उपयोग कर सकते हैं। हर 30 मिनट में समूहीकरण के लिए। बेशक, मैंने जो तारीख चुनी है वह सिर्फ एक यादृच्छिक तारीख है। यदि आप चाहें, तो आप अपने नमूना डेटा में पहली (या अंतिम) तिथि चुन सकते हैं।
और आप इस तकनीक का उपयोग किसी भी समय भाग के प्रत्येक अंतराल को प्राप्त करने के लिए भी कर सकते हैं - बस कीवर्ड MINUTEकोड बदलें। कोड> किसी भी दिनांक भाग के लिए जिसका आप उपयोग करना चाहते हैं, और अंतराल
30
आप जो भी अंतराल चाहते हैं।
निम्नलिखित नमूना डेटा पर विचार करें:
;WITH CTE AS
(
SELECT CAST('2017-01-01T00:00:00' as datetime) As TheDateTime, 0 as rn
UNION ALL
SELECT DATEADD(MINUTE, 1, TheDateTime), rn + 1
FROM CTE
WHERE rn < 60
)
SELECT TheDateTime, rn INTO #T
FROM CTE
OPTION(MAXRECURSION 0)
#टी
अब इसमें निम्न डेटा शामिल है:
TheDateTime rn
2017-01-01 00:00:00.000 0
2017-01-01 00:01:00.000 1
2017-01-01 00:02:00.000 2
2017-01-01 00:03:00.000 3
...
2017-01-01 00:59:00.000 59
2017-01-01 01:00:00.000 60
अधिकतम RN को 30 मिनट तक समूहीकृत करने के लिए आपको बस इसकी आवश्यकता है:
SELECT DATEDIFF(MINUTE, '2017-01-01', TheDateTime) / 30, MAX(rn)
FROM #T
GROUP BY DATEDIFF(MINUTE, '2017-01-01', TheDateTime) / 30
परिणाम:
interval max_rn
0 29
1 59
2 60