我有以下查询,直到昨天工作正常...但由于xyz原因DROP和CREATE访问已从ID撤销....所以有任何方法在MySql中执行以下查询:
DROP TABLE IF EXISTS temp;
CREATE TEMPORARY TABLE temp
(
call_start_date_time DATE,
cust_ph_no INT(11),
actual_repeat_calls INT(11),
total_calls INT(11),
INDEX(call_start_date_time));
INSERT IGNORE INTO temp(call_start_date_time,cust_ph_no,actual_repeat_calls,total_calls)
(SELECT DATE(call_start_date_time),cust_ph_no,count(*)-1 as actual_repeat_calls,count(*) as total_calls
FROM call_data
WHERE DATE(call_start_date_time) = '2016-04-30'
AND campaign_name = 'VT'
AND report_id = '-2'
AND call_status_disposition NOT LIKE 'ST'
AND campaign_type = 'ID'
GROUP BY DATE(call_start_date_time),cust_ph_no);
SELECT call_start_date_time,(SUM(actual_repeat_calls)/SUM(total_calls))
as
repeat_ratio
FROM temp
GROUP BY call_start_date_time;
答案 0 :(得分:0)
要创建临时表,您必须具有CREATE TEMPORARY TABLES权限。
一个简单的替代方法是简单地从表中删除所有行:
delete from temp;
或使用TRUNCATE:
truncate table temp;
但它并不完全相同(临时表是每个会话,更多会话可以使用相同的临时表名而不会发生冲突)。
答案 1 :(得分:0)
select s.*,sum(s.actual_repeat_calls) / sum(s.total_calls) as repeat_ratio
from
(
SELECT DATE(call_start_date_time) as startdatetime,cust_ph_no,count(*)-1 as actual_repeat_calls,count(*) as total_calls
FROM call_data
WHERE DATE(call_start_date_time) = '2016-04-30'
AND campaign_name = 'VT'
AND report_id = '-2'
AND call_status_disposition NOT LIKE 'ST'
AND campaign_type = 'ID'
GROUP BY DATE(call_start_date_time) ,cust_ph_no
) s
按s.startdatetime分组;