2011-09-14 8 views
53

के साथ चयन करता है मेरे पास दो फ़ील्ड - datetime और int के साथ एक तालिका है। मैं datetime पर केवल एक घंटे और मिनट की अनदेखी की तारीख पर एक समूह करना चाहता हूं। SELECT कथन को उस तारीख को वापस कर देना चाहिए जो एक दिन के अंतराल के योग पर नक्शा करे।डॉकटाइम द्वारा SQL सर्वर ग्रुप घंटे के समय को अनदेखा करता है और दिनांक और योग मान

+0

उत्तर में से किसी एक को स्वीकार करना अच्छा होगा (* केवल पूछने वाला यह कर सकता है *) –

उत्तर

90
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField 
FROM MyTable 
GROUP BY CAST(Datetimefield AS DATE) 
+9

यह केवल SQL Server 2008+ (जब दिनांक डेटाटाइप पेश किया गया था) में काम करेगा। यदि आप 2005 या उससे पहले में हैं, तो कन्वर्ट करने के लिए कास्ट बदलना (कन्वर्ट (इंट, डेटाटाइमफील्ड), डेटाटाइम) काम करना चाहिए। –

+0

मुझे यह कहते हुए एक त्रुटि मिल रही है कि 'टाइप डेट एक परिभाषित सिस्टम प्रकार नहीं है'। – Steven

+5

@ स्टेवन - फिर डेरेक की टिप्पणी देखें। यही कारण है कि प्रश्न में अपना ** संस्करण ** शामिल करना एक अच्छा विचार है। – JNK

20

वह एसक्यूएल सर्वर का कौन सा संस्करण वह का उपयोग करता है निर्दिष्ट नहीं किया है के रूप में, (date प्रकार 2005 में उपलब्ध नहीं है) एक भी

SELECT CONVERT(VARCHAR(10),date_column,112),SUM(num_col) AS summed 
FROM table_name 
GROUP BY CONVERT(VARCHAR(10),date_column,112) 
+0

+1 - संस्करण – JNK

+0

संस्करण पर अच्छा बिंदु? ........... – Sentinel

+0

इस संस्करण के लिए 2000/2005 वर्चर रूपांतरण जैसे पुराने संस्करणों में 'DATEADD (डीडी, DATEDIFF (डीडी, 0, डेट_फील्ड), 0)' –

1

इस्तेमाल कर सकते हैं - मैं डेटा के रूप में यह पसंद टाइप करें और

;with cte as(
    select 
     cast(utcdate as date) UtcDay, DATEPART(hour, utcdate) UtcHour, count(*) as Counts 
    from dbo.mytable cd 
    where utcdate between '2014-01-14' and '2014-01-15' 
    group by 
     cast(utcdate as date), DATEPART(hour, utcdate) 
) 
select dateadd(hour, utchour, cast(utcday as datetime)) as UTCDateHour, Counts 
from cte 
4

मैं विकल्प है कि मैं यह करने के लिए होता है शोध आया प्रारूप एक दिनांक समय डेटा प्रकार के अनुरूप बनी हुई है, हालांकि, मेरा मानना ​​है कि विधि का उपयोग मैं सबसे सरल है:

SELECT COUNT(*), 
     DATEADD(dd, DATEDIFF(dd, 0, date_field),0) as dtgroup 
FROM TABLE 
GROUP BY DATEADD(dd, DATEDIFF(dd, 0, date_field),0) 
ORDER BY dtgroup ASC; 
+1

के उपयोग से धीमा है SQL सर्वर के किसी भी संस्करण में और वर्चर रूपांतरणों का उपयोग करने से तेज़ है। –

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