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;

此查询需要大量时间来执行。所以我的问题是如何优化这个查询。(数据:- 大约 150,000 行)

4

1 回答 1

1

试试这个,应该更快并达到您的目的

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

self-joinview您的情况下,不需要A本身,我们想要的只是 auser调用 other的总持续时间users,按date.

call我想对于特定的持续时间和(记录)call是相同的。如果您有多个月的数据,您使用的函数不会返回正确的,因此我使用了该函数calledcalling userday()resultsdate

更多关于 mysql 中的日期时间函数,https://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html

于 2013-05-01T13:19:41.380 回答