Sno*_*owy 56 sql-server datetime rounding
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'
Run Code Online (Sandbox Code Playgroud)
(向http://www.sqlteam.com/article/working-with-time-spans-and-durations-in-sql-server道歉,以获取他们的基础sql)
我试图找到一小时内发生的事件计数,因此结果集看起来像这样:
2007-01-01 12:00 3
2007-01-02 5:00 2
2007-01-03 4:00 1
2007-01-07 3:00 1
Run Code Online (Sandbox Code Playgroud)
我一直在玩dateadd和round并分组,但没有得到它.有人可以帮忙吗?
谢谢.
p.c*_*ell 115
这个怎么样?假设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)
Run Code Online (Sandbox Code Playgroud)
对于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)
Run Code Online (Sandbox Code Playgroud)
这导致:
ForDate | OnHour | Totals
-----------------------------------------
2011-08-09 00:00:00.000 12 3
Run Code Online (Sandbox Code Playgroud)
JNK*_*JNK 18
或者,只是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
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
小智 9
我在其他地方找到了这个.我喜欢这个答案!
SELECT [Hourly], COUNT(*) as [Count]
FROM
(SELECT dateadd(hh, datediff(hh, '20010101', [date_created]), '20010101') as [Hourly]
FROM table) idat
GROUP BY [Hourly]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112366 次 |
| 最近记录: |