2011-11-24 35 views
4

我試圖做一個查詢中檢索給定時間主動呼叫的數量之間,計數的活動記錄數兩個日期

我有一個表與所有與AnsweredTime和ReleaseTime的通話記錄通話我需要在一天中檢索每秒激活的通話數。

所以我做了以下內容:

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是包含兩個日期

之間每隔一表的查詢返回此(partialy):

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 

所以我得到了很好的結果,但查詢速度極其緩慢,我已經完成了索引,我只是想知道是否還有更多的事情可以做..

+0

SELECT語句中Select語句從未瓶坯很好。 lemme rewrite – Twelfth

+0

你確定CalView不是視圖嗎?如果是這樣,性能將會非常糟糕。 – Luis

+0

@luis - 這是一個簡單的表,其中包含1列在24小時時鐘我認爲每一秒。懷疑他的設置,這實際上是一種觀點。 – Twelfth

回答

5

這是一個有趣的笛卡爾,你會在這裏創建。

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 

我相信這應該給你一行每秒的呼叫是活動......那麼這是一個簡單的計數。希望我的語法是正確的,我沒有一個MS SQL服務器環境來確認。

ETA:使用了左連接,因此帶0個調用的任何秒都會出現在這裏,並且空計數。如果切換到內部聯接,則該行將在1秒內消失。

+0

你讓我好奇 - 我假設這是針對呼叫中心的報告 - 你的業務在1秒內呼叫報告中尋找的是什麼?5秒間隔報告無法確定? 10?呼叫表中的行數越少,運行速度就越快......每天有86k行,非專用的服務器將爲此付出努力。如果你有一臺很好的機器來運行它,那麼很棒......想試試它達到毫秒級別的樂趣嗎?如果沒有,更少的時間間隔會加快速度,我不確定你會在這樣的每秒級別上看到更多。 – Twelfth