2013-05-01 40 views
1

我已經從表call_details創建了具有以下結構的HW02。優化查詢獲得每個用戶每天的總通話時間

pri_key | calling_no | called_no | answer_date_time | Duration

,我必須找到在一天每個用戶稱爲總持續時間。 和創建視圖

create view hw02 as 
select calling_no, day(answer_date_time) as days,duration from call_details; 

,我計算出每天每個用戶的total_duration作爲

select a.calling_no,a.days,sum(b.duration) 
from hw02 as a, hw02 as b 
where a.calling_no=b.calling_no and a.days=b.days; 

這個查詢需要大量的時間來執行。所以我的問題是如何優化這個查詢。 (數據: - 約15萬行)

+0

您可以通過應用分區日期,然後累計持續時間在calling_no ...我認爲它會比2個價值之間的比較好.. – Lionel 2013-05-01 13:19:48

回答

1

試試這個,應該是更快,爲你的目的

SELECT 
    calling_no, 
    DATE(answer_date_time) as day, 
    SUM(duration) 
FROM 
    call_details 
GROUP BY 
    calling_no, 
    DATE(answer_date_time) 

view一個self-join在你的情況下,不需要本身,我們想要的是總的持續時間user調用其他users,按date分組。

call時間,我想對特定call將是同爲calledcallinguser(記錄)。通過您所使用的day()功能,不會返回正確的results,如果你有多個月的數據,因此我已經使用了date函數,而不是

更多關於MySQL的日期時間函數,https://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html

+0

感謝您的解決方案... – nKandel 2013-05-01 14:50:25

+0

沒有問題,很高興知道這是有幫助的 – Akash 2013-05-01 15:17:18

相關問題