计算sql中每小时发生的总数或事物数

时间:2012-08-21 17:56:43

标签: sql datetime

我有一个大约3000行的列表。每一行都有不同的结束时间。见下文

Fund name | Fund ID   | RedeemTime  | PurchaseTime | LatestTime  |
__________  _________  ____________   ____________ | ___________ |
Title1    | IDnumber  |  4:00:00    | 14:30:00     |  14:30:00   |
Title2    | IDnumber2 | 13:30:00    | 12:00:00     |  13:30:00   |
Title3    | IDnumber3 | 10:00:00    | 14:00:00     |  14:00:00   |
Title4    | IDnumber4 | 10:00:00    | 10:30:00     |  10:30:00   |

我目前正在使用第5列的案例陈述来查找两次中的较晚时间。

我需要拿第5列并提供每小时发生的事情的计数。例如,在上表中,结果将是

Hour     |  Count
_________ _______
10:00:00 |    1
13:00:00 |    1
14:00:00 |    2

2 个答案:

答案 0 :(得分:3)

您可以在子查询中“规范化”两次。您可以使用CTE生成小时列表。例如,2012年8月的所有时间:

; with  HourList as
        (
        select  cast('2012-08-01' as datetime) as DateCol
        union all
        select  dateadd(hour, 1, DateCol)
        from    HourList
        where   dateadd(hour, 1, DateCol) < '2012-09-01'
        )
select  hr.DateCol
,       count(yt.StartTime)
from    HourList hr
left join
        (
        select  case when time1 > time2 then time1 else time2 end as EndTime
        from    YourTable
        ) yt
on      yt.EndTime <= hr.DateCol and hr.DateCol < dateadd(hour, 1, yt.EndTime)
group by
        hr.DateCol
option  (maxrecursion 0)

如果您没有填满工作时间的表格,可以通过多种方式生成表格。它们都依赖于您的数据库。因此,如果您需要帮助,请发布您正在使用的数据库。

答案 1 :(得分:1)

假设您只使用时间字段......

首先,选择哪个时间更长:

(CASE WHEN time2 > time1 THEN time2
ELSE time1) as time

然后你会SELECT COUNT GROUP BY HOUR(time)