2012-01-04 13 views
6

में गोल समय या तिथि आंकड़ा द्वारा गणना करने के लिए की जरूरत है मैं सुश्री Sql में 2 डेटा स्तंभ है आईडी के रूप में 2008एसक्यूएल सर्वर

uniqueidentifier स्तंभ और कुछ परिणाम की तरह इस प्रकार के साथ एक datetime स्तंभ।

2011-11-06 18:02:18.030 
2011-11-06 18:02:18.373 
2011-11-06 18:02:57.560 
2011-11-06 18:02:58.593 
2011-11-06 18:03:01.717 
2011-11-06 18:03:02.373 
2011-11-06 18:03:03.407 

आईडी कॉलम की जटिलता के अलावा। मैं के रूप में

2011-11-06 18:02:00 (1 Minute) 
2011-11-06 18:03:00 (1 Minute) 
2011-11-06 18:04:00 (1 Minute) 
2011-11-06 18:05:00 (1 Minute) 
2011-11-06 18:06:00 (1 Minute) 

या प्रतिदिन

इस प्रकार है अन्यथा उपज के लिए अंतराल प्रति केवल 1 अद्वितीय केवल प्रति

minutes(1,5,10,15,30) 
hours (1,2) 
days(1,5,10) 
months(1,2) 

परिणाम या फिदा जाना चाहिए ओम अंतराल आधारित डेटा समूहीकरण में दिलचस्पी रखता हूँ

2011-11-06 00:00:00 (1 Day) 
2011-11-07 00:00:00 (1 Day) 
2011-11-08 00:00:00 (1 Day) 
2011-11-09 00:00:00 (1 Day) 
2011-11-10 00:00:00 (1 Day) 

आदि

किसी भी रचनात्मक सुझाव का स्वागत किया जाएगा।

उत्तर

25

आप किसी भी तारीख अंतराल के लिए एक ही तकनीक का उपयोग कर सकते हैं। यह पूर्णांक विभाजन

SELECT 
    DATEADD(minute, DATEDIFF(minute, 0, foo), 0),    -- whole minute 
    DATEADD(minute, DATEDIFF(minute, 0, foo)/5 * 5, 0),  -- 5 minute 
    DATEADD(minute, DATEDIFF(minute, 0, foo)/10 * 10, 0), -- 10 minute 
    DATEADD(minute, DATEDIFF(minute, 0, foo)/15 * 15, 0), -- 15 minute 
    DATEADD(minute, DATEDIFF(minute, 0, foo)/30 * 30, 0), -- 30 minute 

    DATEADD(hour, DATEDIFF(hour, 0, foo), 0),     -- whole hour 
    DATEADD(hour, DATEDIFF(hour, 0, foo)/2 * 2, 0),   -- 2 hour 

    DATEADD(day, DATEDIFF(day, 0, foo), 0),     -- whole day 
    DATEADD(day, DATEDIFF(day, 0, foo)/5 * 5, 0),   -- 5 day 
    DATEADD(day, DATEDIFF(day, 0, foo)/10 * 10, 0),   -- 10 day 

    DATEADD(month, DATEDIFF(month, 0, foo), 0),    -- whole month 
    DATEADD(month, DATEDIFF(month, 0, foo)/2 * 2, 0)   -- 2 month 
FROM 
    @dates; 
+0

यह इतना अच्छा है, और इसे पूरा करने का एक बहुत साफ तरीका है। मुझे कहना होगा कि मेरी इच्छा है कि इसे पूरा करने के लिए कुछ बनाया गया हो, लेकिन हे, आपका दृष्टिकोण चाल है। –

1

मानते हुए, कि अपने दिनांक समय स्तंभ mydatetime

नामित मिनट

के लिए यदि केवल

SELECT DISTINCT DATEADD(MINUTE, DATEPART(minute, mydatetime), DATEADD(HOUR, DATEPART(HOUR, mydatetime), CONVERT(varchar, mydatetime, 112))) 
from YourTable 

अगर गोल फिदा, तो यह

बहुत सरल है
select DISTINCT CAST(mydatetime as smalldatetime) 
from YourTable 

घंटे सिर्फ समान तरीके से लिए

दिनों

select DISTINCT CAST(CONVERT(varchar, mydatetime, 112) as date) 
from YourTable 

महीने

के लिए के लिए 0
select DISTINCT DATEADD(DAY, 1-DAY(mydatetime), CONVERT(varchar, mydatetime, 112)) 
from YourTable 
+0

अन्य अंतराल के बारे में क्या है) पर निर्भर करता है? यह भी देखने के लिए http://stackoverflow.com/a/1177529/27535 इस – gbn

+0

को करने के सर्वोत्तम तरीकों के बारे में @gbn उत्तर देखें, इसका अधिक सार्वभौमिक –

संबंधित मुद्दे