我查看了从具有以下结构的表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;
此查询需要大量时间才能执行。所以我的问题是如何优化此查询。 (数据: - 大约150,000行)
答案 0 :(得分:1)
试试这个,应该更快,并为您的目的服务
SELECT
calling_no,
DATE(answer_date_time) as day,
SUM( duration )
FROM
call_details
GROUP BY
calling_no,
DATE(answer_date_time)
在您的情况下,self-join
本身不需要view
,我们只需要user
次调用其他users
的总持续时间,按{分组{1}}。
对于date
和call
call
(记录),我认为特定called
calling
的持续时间相同。如果您有多个月的数据,那么您使用的user
函数将不会返回正确的day()
,因此我使用了results
函数
更多关于mysql中的datetime函数,https://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html