用于在一个查询中计算来自时间段的事件的SQL查询

时间:2012-11-16 21:56:51

标签: mysql sql

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

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

我每个时期都在这样做。虽然我需要做五个单独的查询需要一段时间。谢谢你的帮助!

2 个答案:

答案 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