1

MS SQL 2012 (40m レコード) に通話データを含む大きなテーブルがあります。通話のピーク量と発生時刻を知りたいです。可能であれば、次の 4 つの繁忙期も見つけたいと思います。

3 つの列を使用する予定です: CallID DialTime EndTime

私がこれを行うと考えることができる唯一の方法は、これを行うことです:

Select '2013-07-01 00:00:01' as [Period], count([CallID]) as [Calls]
from [Table]
where DialTime <= '2013-07-01 00:00:01'
and EndTime >= '2013-07-01 00:00:01'

union

Select '2013-07-01 00:00:02' as [Period], count([CallID]) as [Calls]
from [Table]
where DialTime <= '2013-07-01 00:00:02'
and EndTime >= '2013-07-01 00:00:02'

union

etc

誰でもこれを行うためのより良い/より効率的な方法を提案できますか?

4

2 に答える 2

0

VALUES をテーブル ソースとして使用できます

SELECT DialTime, EndTime, o.Calls
FROM (VALUES ('20130701 00:00:01', '20130701 00:00:01'),
             ('20130701 00:00:02', '20130701 00:00:02'))x(DialTime, EndTime)
  CROSS APPLY(
              SELECT COUNT(CallID) AS Calls      
              FROM [Table] t
              WHERE DialTime <= x.DialTime
                AND EndTime >= x.EndTime
              ) o
于 2013-07-09T09:51:35.937 に答える