सवाल एसक्यूएल सर्वर समूह प्रति दिन डेटटाइम की गणना से?


    create table #Events
(
    EventID int identity primary key,
    StartDate datetime not null,
    EndDate datetime not null
)
go
insert into #Events (StartDate, EndDate)
select '2007-01-01 12:44:12 AM', '2007-01-01 12:45:34 AM' union all
select '2007-01-01 12:45:12 AM', '2007-01-01 12:46:34 AM' union all
select '2007-01-01 12:46:12 AM', '2007-01-01 12:47:34 AM' union all
select '2007-01-02 5:01:08 AM', '2007-01-02 5:05:37 AM' union all
select '2007-01-02 5:50:08 AM', '2007-01-02 5:55:59 AM' union all
select '2007-01-03 4:34:12 AM', '2007-01-03 4:55:18 AM' union all
select '2007-01-07 3:12:23 AM', '2007-01-07 3:52:25 AM'

(माफी के साथ http://www.sqlteam.com/article/working-with-time-spans-and-durations-in-sql-server अपने बेस एसक्यूएल कटाई के लिए)

मैं एक घंटे में हुई घटनाओं की गिनती खोजने की कोशिश कर रहा हूं, इसलिए परिणाम सेट इस तरह दिखेगा:

2007-01-01      12:00     3
2007-01-02       5:00     2
2007-01-03       4:00     1
2007-01-07       3:00     1

मैं डेटडैड और राउंड और ग्रुपिंग के साथ खेल रहा हूं लेकिन इसे नहीं मिला। क्या कोई मदद कर सकता है?

धन्यवाद।


44
2017-08-09 19:21


मूल




जवाब:


इस बारे में कैसा है? एसक्यूएल सर्वर 2008 मानते हैं:

SELECT CAST(StartDate as date) AS ForDate,
       DATEPART(hour,StartDate) AS OnHour,
       COUNT(*) AS Totals
FROM #Events
GROUP BY CAST(StartDate as date),
       DATEPART(hour,StartDate)

पूर्व -2008 के लिए:

SELECT DATEADD(day,datediff(day,0,StartDate),0)   AS ForDate,
       DATEPART(hour,StartDate) AS OnHour,
       COUNT(*) AS Totals
FROM #Events
GROUP BY CAST(StartDate as date),
       DATEPART(hour,StartDate)

इसका परिणाम यह होगा :

ForDate                 | OnHour | Totals
-----------------------------------------
2011-08-09 00:00:00.000     12       3

94
2017-08-09 19:26



यहां प्रश्न पूछने के लिए खेद है, लेकिन मान लें कि हमारे पास चौथा कॉलम है, इसमें संख्याएं हैं, और आप उन्हें घंटे के उदाहरण के साथ 12 घंटे पर जोड़ना चाहते हैं, मान लें कि हमारे पास 6 पंक्तियां हैं और प्रत्येक में 5 सेब हैं इसलिए यह 30 होगा। - user206168
टोटल के बाद जोड़ें ", एसयूएम (सेब) सेब के रूप में" - Loren


वैकल्पिक रूप से, बस GROUP BY घंटा और दिन:

SELECT  CAST(Startdate as DATE) as 'StartDate', 
        CAST(DATEPART(Hour, StartDate) as varchar) + ':00' as 'Hour', 
        COUNT(*) as 'Ct'
FROM #Events
GROUP BY CAST(Startdate as DATE), DATEPART(Hour, StartDate)
ORDER BY CAST(Startdate as DATE) ASC

उत्पादन:

StartDate   Hour    Ct
2007-01-01  0:00    3
2007-01-02  5:00    2
2007-01-03  4:00    1
2007-01-07  3:00    1

17
2017-08-09 19:43





मैंने इसे कहीं और पाया। मुझे यह जवाब पसंद है!

SELECT [Hourly], COUNT(*) as [Count]
  FROM 
 (SELECT dateadd(hh, datediff(hh, '20010101', [date_created]), '20010101') as [Hourly]
    FROM table) idat
 GROUP BY [Hourly]

8
2018-05-17 15:46



टाइमलाइन बनाने पर [घंटा] द्वारा ऑर्डर की आवश्यकता हो सकती है - aggaton
उपर्युक्त के लिए MySQL क्वेरी क्या होगी? - Biranchi