我有一个跟踪事件的表(事件)。每个事件都有一个eventTime字段。我想知道在时间A和时间B之间发生了多少事件,在时间C和时间D之间发生了多少事件,等等。我希望这些计数中的每一个都不同(即我希望每个时间段都有不同的计数)。有没有办法用一个SQL查询执行此操作?现在我一直在做类似的事情:
select count(ID) from Event where eventTime >= timeA and eventTime <= timeB
我每个时期都在这样做。虽然我需要做五个单独的查询需要一段时间。谢谢你的帮助!
答案 0 :(得分:2)
select sum(eventTime between timeA and timeB) as AB_count,
sum(eventTime between timeC and timeD) as CD_count
from Event
答案 1 :(得分:0)
想象一下使用StartDate和EndDate列的表DateRanges,允许日期时间
+-----------+---------+
| StartDate | EndDate |
+-----------+---------+
| A | B |
| C | D |
+-----------+---------+
Select
d.StartDate,
d.EndDate,
Sum(Case When e.EventTime >= d.StartDate And e.EventTime < d.EndDate Then 1 Else 0 End) as EventCount
From
DateRanges d
Cross Join
Event e
Group By
d.StartDate,
d.EndDate