एसक्यूएल सर्वर ग्रुप डेटाइम द्वारा घंटे मिनट की उपेक्षा और एक तिथि और योग मूल्य के साथ चयन करें


86

मेरे पास दो क्षेत्रों के साथ एक तालिका है - datetimeऔर int। मैं datetimeकेवल घंटे और मिनट की अनदेखी करने की तारीख पर एक समूह बनाना चाहता हूं । SELECTबयान एक तारीख है कि एक ही दिन के पूर्णांक के योग के नक्शे लौटना चाहिए।


1
किसी एक उत्तर को स्वीकार करना अच्छा होगा ( केवल
पूछने वाला

जवाबों:


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

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

मुझे यह कहते हुए एक त्रुटि हो रही है कि 'टाइप तिथि परिभाषित प्रणाली प्रकार नहीं है'।
स्टीवन

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

@ यह काम करने के लिए प्रतीत नहीं होता है। एक select convert(convert(int, getdate()), datetime)गलत वाक्यविन्यास त्रुटि के साथ विफल
rabudde

1
क्षमा करें, कनवर्ट करें (डेटाटाइम, कनवर्ट करें (int, getdate ()))
Derek

24

जैसा कि उसने निर्दिष्ट नहीं किया है कि वह एसक्यूएल सर्वर के किस संस्करण का उपयोग करता है ( 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)

इस आवश्यकता के लिए 2000/2005 संस्करण रूपांतरण जैसे पुराने संस्करणों में उपयोग की तुलना में धीमी हैDATEADD(dd, DATEDIFF(dd, 0, date_field),0)
Used_By_Already

7

मैं उन विकल्पों पर शोध कर रहा हूं जो मुझे यह करना होगा, हालांकि, मेरा मानना ​​है कि मेरे द्वारा उपयोग की जाने वाली विधि सबसे सरल है:

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 सर्वर के किसी भी संस्करण में काम करेगा और varchar रूपांतरणों का उपयोग करने से अधिक तेज़ है।
Used_By_Already

क्या आप स्पष्ट कर सकते हैं कि "dd" क्या है? मुझे समझ में नहीं आ रहा है कि आप इसमें क्या करने वाले हैं।
बेवफाफूल

"dd" दिन के बराबर तारीख है। आप "दिन", "डी" या "डी डी" का उपयोग भी कर सकते हैं
जेफर्सन सिल्वा

3

- मुझे डेटा टाइप और फॉर्मेट डेट टाइम डेटा टाइप के अनुरूप बना रहता है

;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

2

व्यक्तिगत रूप से मैं प्रारूप फ़ंक्शन पसंद करता हूं, आपको बस तारीख के हिस्से को बहुत आसानी से बदलने की अनुमति देता है।

     declare @format varchar(100) = 'yyyy/MM/dd'
     select 
        format(the_date,@format), 
        sum(myfield) 
     from mytable 
     group by format(the_date,@format) 
     order by format(the_date,@format) desc;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.