Soru SQL Server Grubu Saat Başına DateTime Sayısı?


    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'

(özür dilemek http://www.sqlteam.com/article/working-with-time-spans-and-durations-in-sql-server kendi taban sqllerini toplamak için)

Bir saat içinde meydana gelen Olayların sayısını bulmaya çalışıyorum, sonuç kümesi şöyle görünecekti:

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

Dateadd ve yuvarlak ve gruplarla oynuyordum ama almadım. Biri yardım edebilir mi?

Teşekkürler.


44
2017-08-09 19:21


Menşei




Cevaplar:


Buna ne dersin? SQL Server 2008'i varsayarsak:

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 öncesi için:

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)

Bu sonuç:

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

94
2017-08-09 19:26



Burada soru sorduğum için üzgünüm, ancak sayıları olan 4. sütuna sahip olduğumuzu ve bunların 12 saatlik bir saat örneğiyle özetlenmesini istediğimizi, 6 satır olduğunu ve her birinin 5 elma olduğunu söyleyelim, böylece 30 olur. - user206168
Toplamlar olarak ekle ", SUM (elma) elma olarak" - Loren


Alternatif olarak, sadece GROUP BY saat ve gün

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

çıktı:

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





Bunu başka bir yerde buldum. Bu cevabı sevdim!

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



Bir zaman çizelgesi oluşturuyorsa [Saatlik] tarafından bir Siparişe ihtiyaç duyulabilir - aggaton
Yukarıdakiler için MySQL sorgusu ne olurdu? - Biranchi