我有一个大约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
答案 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)