2011-08-09 41 views
41
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' 

(với lời xin lỗi đến http://www.sqlteam.com/article/working-with-time-spans-and-durations-in-sql-server cho thu hoạch sql cơ sở của họ)Nhóm máy chủ SQL theo số giờ trên mỗi giờ?

Tôi cố gắng để tìm ra số sự kiện xảy ra trong một tiếng đồng hồ, vì vậy các tập kết quả sẽ trông như thế này:

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

Tôi đã chơi với dateadd và tròn và nhóm nhưng không nhận được nó. Có ai giúp được không?

Cảm ơn.

Trả lời

86

Làm thế nào về điều này? Giả sử SQL Server 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) 

Đối với pre-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) 

Điều này dẫn đến:

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

Xin lỗi đặt câu hỏi ở đây, nhưng cho phép chúng tôi có cột thứ 4 có số và bạn muốn kết hợp chúng theo giờ làm ví dụ 12 giờ, giả sử chúng tôi có 6 hàng và mỗi hàng có 5 quả táo để là 30. – user206168

+0

Thêm sau khi Tổng cộng ", SUM (táo) làm táo" – Loren

16

Ngoài ra, chỉ GROUP BY giờ và trong ngày:

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 

đầu ra:

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 
8

Tôi tìm thấy nơi này ở một nơi khác. Tôi thích câu trả lời này!

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

Có thể cần một Đơn đặt hàng trước [Giờ] nếu tạo dòng thời gian – aggaton

+0

Truy vấn MySQL cho điều gì ở trên? – Biranchi

Các vấn đề liên quan