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

समूह दिनांक समय 5,15,30 और 60 मिनट के अंतराल में

उपयोग

datediff(minute, '1990-01-01T00:00:00', yourDatetime)

आपको 1990-1-1 के बाद से मिनटों की संख्या देगा (आप वांछित आधार तिथि का उपयोग कर सकते हैं)।

फिर आप इस विभाजन के परिणाम से 5, 15, 30 या 60, और समूह से विभाजित कर सकते हैं। मैंने चेक किया है कि यह एक पूर्णांक विभाजन के रूप में मूल्यांकन किया जाएगा, इसलिए आपको एक पूर्णांक संख्या मिलेगी जिसका उपयोग आप समूह के लिए कर सकते हैं।

यानी

group by datediff(minute, '1990-01-01T00:00:00', yourDatetime) /5

अपडेट करें चूंकि मूल प्रश्न को समूहीकरण के बाद डेटा को दिनांक-समय प्रारूप में दिखाने की आवश्यकता के लिए संपादित किया गया था, इसलिए मैंने यह सरल प्रश्न जोड़ा है जो ओपी चाहता है:

-- This convert the period to date-time format
SELECT 
    -- note the 5, the "minute", and the starting point to convert the 
    -- period back to original time
    DATEADD(minute, AP.FiveMinutesPeriod * 5, '2010-01-01T00:00:00') AS Period,
    AP.AvgValue
FROM
    -- this groups by the period and gets the average
    (SELECT
        P.FiveMinutesPeriod,
        AVG(P.Value) AS AvgValue
    FROM
        -- This calculates the period (five minutes in this instance)
        (SELECT 
            -- note the division by 5 and the "minute" to build the 5 minute periods
            -- the '2010-01-01T00:00:00' is the starting point for the periods
            datediff(minute, '2010-01-01T00:00:00', T.Time)/5 AS FiveMinutesPeriod,
            T.Value
        FROM Test T) AS P
    GROUP BY P.FiveMinutesPeriod) AP

ध्यान दें:मैंने इसे स्पष्टता के लिए 3 उपश्रेणियों में विभाजित किया है। आपको इसे अंदर से बाहर पढ़ना चाहिए। बेशक, इसे एकल, संक्षिप्त क्वेरी के रूप में लिखा जा सकता है

ध्यान दें:यदि आप अवधि और प्रारंभ दिनांक-समय बदलते हैं, तो आपको अपनी ज़रूरत का कोई भी अंतराल मिल सकता है, जैसे किसी दिए गए दिन से शुरू होने वाले सप्ताह, या जो भी आपको चाहिए हो

यदि आप इस क्वेरी के लिए परीक्षण डेटा जेनरेट करना चाहते हैं तो इसका उपयोग करें:

CREATE TABLE Test
( Id INT IDENTITY PRIMARY KEY,
Time DATETIME,
Value FLOAT)

INSERT INTO Test(Time, Value) VALUES('2012-03-22T00:00:22', 10)
INSERT INTO Test(Time, Value) VALUES('2012-03-22T00:03:22', 10)
INSERT INTO Test(Time, Value) VALUES('2012-03-22T00:04:45', 10)
INSERT INTO Test(Time, Value) VALUES('2012-03-22T00:07:21', 20)
INSERT INTO Test(Time, Value) VALUES('2012-03-22T00:10:25', 30)
INSERT INTO Test(Time, Value) VALUES('2012-03-22T00:11:22', 30)
INSERT INTO Test(Time, Value) VALUES('2012-03-22T00:14:47', 30)

क्वेरी को क्रियान्वित करने का परिणाम यह है:

Period                     AvgValue
2012-03-22 00:00:00.000    10
2012-03-22 00:05:00.000    20
2012-03-22 00:10:00.000    30


  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 में डेटटाइम फ़ील्ड का समय भाग

  2. SQL सर्वर 2008 के लिए लिंक्ड सर्वर कैसे बनाएं जहां हमारे पास 2000 और 2005 से डेटाबेस है

  3. जाँच करें कि क्या ऑब्जेक्ट OBJECTPROPERTY () फ़ंक्शन का उपयोग करके SQL सर्वर में एक तालिका, दृश्य या संग्रहीत प्रक्रिया है

  4. संस्करण 11 के लिए लोकलडीबी के लिए कनेक्शन स्ट्रिंग क्या है?

  5. अद्यतन करें यदि मौजूद है तो SQL Server 2008 में INSERT करें