2

我有一个跟踪事件的表(事件)。每个事件都有一个 eventTime 字段。我想知道时间 A 和时间 B 之间发生了多少事件,时间 C 和时间 D 之间发生了多少事件,等等。我希望这些计数中的每一个都不同(即,我希望每个时间段都有不同的计数)。有没有办法用一个 SQL 查询来做到这一点?现在我一直在做类似的事情:

select count(ID) from Event where eventTime >= timeA and eventTime <= timeB

我只是在每个时期都这样做。不过,当我必须进行五个单独的查询时,这需要一段时间。谢谢您的帮助!

4

2 回答 2

2
select sum(eventTime between timeA and timeB) as AB_count,
       sum(eventTime between timeC and timeD) as CD_count                   
from Event 
于 2012-11-16T21:59:27.173 回答
0

想象一个表 DateRanges 与 StartDate 和 EndDate 列允许日期时间

+-----------+---------+
| 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
于 2012-11-16T22:26:29.403 回答