Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

आप किसी भी समय आधारित अंतराल के आधार पर समूह कैसे बनाते हैं?

मुझे लगता है कि आप अधिक जटिल थिन हैं।
आप 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL क्वेरी .NET एप्लिकेशन में धीमी है लेकिन SQL सर्वर प्रबंधन स्टूडियो में तात्कालिक है

  2. SQL सर्वर में स्कीमा क्या है और SQL सर्वर डेटाबेस में स्कीमा कैसे बनाएँ / छोड़ें - SQL सर्वर / TSQL ट्यूटोरियल भाग 27

  3. SQL सर्वर - यह समझना कि MIN(पाठ) कैसे काम करता है

  4. यादृच्छिक तिथि के साथ पंक्तियों को कैसे अपडेट करें

  5. समग्र कुंजी के लिए विदेशी कुंजी