2つの日付間でアクティブなレコードの数を数えます

私は特定の時間のアクティブなコールの数を取得するためにクエリを実行しようとしていますが、

AnsweredTimeとReleaseTimeですべての通話記録を持つテーブルCALLSがあり、1日に1秒ごとにアクティブな通話数を取得する必要があります。

だから私は次のことをした:

    SELECT dt,
(SELECT COUNT(Id) FROM Calls WHERE
    AnsweredTimestamp <= dt AND
    ReleasedTimestamp >= dt)
 FROM CALView
WHERE dt >='2011-10-05'
and dt <'2011-10-06'

CalViewは、2つの日付間の毎秒を含む表です。

クエリはこれを返す(部分的に):

2011-10-05 09:40:00.000 20
2011-10-05 09:40:01.000 20
2011-10-05 09:40:02.000 20
2011-10-05 09:40:03.000 21
2011-10-05 09:40:04.000 21
2011-10-05 09:40:05.000 21
2011-10-05 09:40:06.000 21
2011-10-05 09:40:07.000 21
2011-10-05 09:40:08.000 21
2011-10-05 09:40:09.000 21
2011-10-05 09:40:10.000 20
2011-10-05 09:40:11.000 20
2011-10-05 09:40:12.000 19
2011-10-05 09:40:13.000 19
2011-10-05 09:40:14.000 19
2011-10-05 09:40:15.000 19
2011-10-05 09:40:16.000 19
2011-10-05 09:40:17.000 19
2011-10-05 09:40:18.000 19
2011-10-05 09:40:19.000 19
2011-10-05 09:40:20.000 18
2011-10-05 09:40:21.000 18
2011-10-05 09:40:22.000 18
2011-10-05 09:40:23.000 18
2011-10-05 09:40:24.000 18
2011-10-05 09:40:25.000 18
2011-10-05 09:40:26.000 18
2011-10-05 09:40:27.000 18
2011-10-05 09:40:28.000 18
2011-10-05 09:40:29.000 18
2011-10-05 09:40:30.000 18
2011-10-05 09:40:31.000 18
2011-10-05 09:40:32.000 18
2011-10-05 09:40:33.000 18
2011-10-05 09:40:34.000 18
2011-10-05 09:40:35.000 19
2011-10-05 09:40:36.000 18
2011-10-05 09:40:37.000 18
2011-10-05 09:40:38.000 18
2011-10-05 09:40:39.000 18
2011-10-05 09:40:40.000 18
2011-10-05 09:40:41.000 18
2011-10-05 09:40:42.000 18
2011-10-05 09:40:43.000 18
2011-10-05 09:40:44.000 19
2011-10-05 09:40:45.000 19
2011-10-05 09:40:46.000 19
2011-10-05 09:40:47.000 19
2011-10-05 09:40:48.000 19
2011-10-05 09:40:49.000 19
2011-10-05 09:40:50.000 19
2011-10-05 09:40:51.000 19
2011-10-05 09:40:52.000 19
2011-10-05 09:40:53.000 19
2011-10-05 09:40:54.000 19
2011-10-05 09:40:55.000 19
2011-10-05 09:40:56.000 19
2011-10-05 09:40:57.000 19
2011-10-05 09:40:58.000 20
2011-10-05 09:40:59.000 20
2011-10-05 09:41:00.000 20
2011-10-05 09:41:01.000 20
2011-10-05 09:41:02.000 20
2011-10-05 09:41:03.000 20
2011-10-05 09:41:04.000 20
2011-10-05 09:41:05.000 20
2011-10-05 09:41:06.000 20
2011-10-05 09:41:07.000 20
2011-10-05 09:41:08.000 20
2011-10-05 09:41:09.000 19
2011-10-05 09:41:10.000 19
2011-10-05 09:41:11.000 19
2011-10-05 09:41:12.000 19
2011-10-05 09:41:13.000 19
2011-10-05 09:41:14.000 19
2011-10-05 09:41:15.000 19
2011-10-05 09:41:16.000 20
2011-10-05 09:41:17.000 20
2011-10-05 09:41:18.000 20
2011-10-05 09:41:19.000 20
2011-10-05 09:41:20.000 20
2011-10-05 09:41:21.000 20
2011-10-05 09:41:22.000 20
2011-10-05 09:41:23.000 20
2011-10-05 09:41:24.000 20
2011-10-05 09:41:25.000 20
2011-10-05 09:41:26.000 20
2011-10-05 09:41:27.000 20
2011-10-05 09:41:28.000 20
2011-10-05 09:41:29.000 20
2011-10-05 09:41:30.000 19
2011-10-05 09:41:31.000 19
2011-10-05 09:41:32.000 19
2011-10-05 09:41:33.000 19
2011-10-05 09:41:34.000 20
2011-10-05 09:41:35.000 20
2011-10-05 09:41:36.000 20
2011-10-05 09:41:37.000 19
2011-10-05 09:41:38.000 19
2011-10-05 09:41:39.000 19
2011-10-05 09:41:40.000 19
2011-10-05 09:41:41.000 19
2011-10-05 09:41:42.000 19
2011-10-05 09:41:43.000 19
2011-10-05 09:41:44.000 19
2011-10-05 09:41:45.000 19
2011-10-05 09:41:46.000 18
2011-10-05 09:41:47.000 18
2011-10-05 09:41:48.000 19
2011-10-05 09:41:49.000 20
2011-10-05 09:41:50.000 20
2011-10-05 09:41:51.000 20
2011-10-05 09:41:52.000 20
2011-10-05 09:41:53.000 20

だから私は良い結果が得られましたが、クエリは極端に遅く、インデックスを作成しました。もっと何かできるかどうか疑問に思っています。

4
selectステートメント内のselectステートメントはあまり適切に実行されません。レームリライト
追加された 著者 Twelfth,
@luis - それは私が推測する24時間のクロックで毎秒1行を含むシンプルなテーブルです。それは実際にはビューであると彼のセットアップを与えられた疑問。
追加された 著者 Twelfth,
CalViewはビューではありませんか?そうであれば、パフォーマンスはかなり悪くなります。
追加された 著者 Luis,

1 答え

ここで作成するのは面白いデカルトです。

Select dt,count(1)
from calview
left join calls on calls.AnsweredTimestamp <= calview.dt AND
                    calls.ReleasedTimestamp >= calview.dt
WHERE dt >='2011-10-05'
and dt <'2011-10-06'
group by dt

私はこれが1秒間に1列の通話をアクティブにしなければならないと信じています...それは単純なカウントです。私の構文が正しいことを願って、私は確認するためにms SQLサーバー環境を持っていません。

ETA:左結合が使用されたので、0のコールを持つ任意の秒がヌルカウントと共にここに表示されます。内部結合に切り替えると、その1秒間隔で行が消えます。

5
追加された
あなたは私が好奇心を持っている - 私はこれがコールセンターのレポートのためのものだと仮定しています - あなたのビジネスは何秒間のインターバルレポートで判断できない1秒間隔のコールレポートを探していますか? 10?あなたの呼び出しテーブルの行が少ないほど、これはより速く実行されます...あなたは1日に86kの行を持っており、非標準的なサーバーはこれを苦労します。あなたはこれを実行する良いマシンを持っている場合、素晴らしい...それの楽しみのためにミリ秒レベルにそれを試したいですか?そうでない場合は、間隔を短くすることでこれをスピードアップし、このように1秒あたりに何が表示されるのかは分かりません。
追加された 著者 Twelfth,