2013-05-01 42 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

相关问题