2

イベントを追跡するテーブル(イベント)があります。各イベントにはeventTimeフィールドがあります。時間Aと時間Bの間に発生したイベントの数、時間Cと時間Dの間に発生したイベントの数などを取得したい。これらのカウントをそれぞれ異なるものにしたい(つまり、期間ごとに個別のカウントが必要)。1つのSQLクエリでこれを行う方法はありますか?今、私は次のようなことをしています。

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

そして、私はちょうど各期間にそれをやっています。ただし、5つの個別のクエリを実行する必要がある場合は時間がかかります。助けてくれてありがとう!

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

日時を許可する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
于 2012-11-16T22:26:29.403 に答える