datediff(minute, '1990-01-01T00:00:00', yourDatetime)
का प्रयोग के बाद से 1990/01/01 (आप इच्छित आधार तिथि का उपयोग कर सकते हैं) आप मिनट की संख्या दे देंगे।
फिर आप इस विभाजन के परिणामस्वरूप 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 सबक्वेरी में इस विभाजित किया है। आपको इसे अंदर से पढ़ना चाहिए। यह, ज़ाहिर है, एक एकल, कॉम्पैक्ट क्वेरी के रूप में लिखा जा सकता है
नोट: अगर आप अवधि और प्रारंभ दिनांक समय आप किसी भी अंतराल आप की जरूरत है, किसी दिन से शुरू सप्ताह की तरह प्राप्त कर सकते हैं बदलने के लिए, या जो कुछ भी आप
की जरूरत कर सकते हैं आप के लिए इस क्वेरी इस का उपयोग परीक्षण डाटा जनरेट करना चाहते हैं:
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
:
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)
क्वेरी को क्रियान्वित करने का नतीजा यह है
यह मेरे लिए स्पष्ट नहीं है कि 'अलग-अलग अंतराल में समूह' से आपका क्या मतलब है। याद करते हुए कि परिणाम कॉलम में जरूरी पंक्तियां हैं, क्या आप दिखा सकते हैं कि आपके डेटा की नमूना पंक्तियां कैसी दिखाई देगी? विशेष रूप से यह मुझे स्पष्ट नहीं है, क्या एक आईडी 1 5 मिनट के समूह में होगी, एक 15 मिनट के समूह में भी, एक 30 मिनट के समूह में ... आदि। यदि प्रत्येक रिकॉर्ड 4 समूहों में होगा, उदाहरण के लिए, परिणाम में इच्छित कॉलम के नाम क्या हैं? –
इसके अलावा, यदि आप कई एसक्यूएल प्रश्न पोस्ट करने जा रहे हैं, तो 1) हमेशा विशिष्ट प्रकार के सर्वर के साथ प्रश्न टैग करें (मैं इसे एमएस एसक्यूएल के शीर्षक से देखता हूं, लेकिन यदि आपने टैग का उपयोग किया है तो वे आपको सुझाव देंगे कि आप एक संस्करण निर्दिष्ट कर सकते हैं) और 2) आप एक एसक्यूएल फिडल (http://sqlfiddle.org) स्थापित करने के लिए समय निकालकर "प्रश्न का क्या अर्थ है" को समझने की लागत को कम कर सकते हैं; यह आपको उन उदाहरण डेटा में डाल देता है जिन्हें आप क्वेरी करना चाहते हैं। –
बस कुछ साफ़ करने के लिए: SQL सर्वर में 'DATETIME' ** स्ट्रिंग-आधारित प्रारूप में संग्रहीत ** कभी ** नहीं है - इसे आंतरिक रूप से दो 4-बाइट INT मानों के रूप में संग्रहीत किया जाता है। वह प्रारूप आपकी ** डिफ़ॉल्ट प्रस्तुति ** हो सकता है - लेकिन यह ** प्रारूप ** उस प्रारूप में संग्रहीत नहीं है! –