2016-05-02 4 views
0

私は昨日までうまく動作していた次のクエリを持っています...しかし、xyzの理由でDROPとCREATEアクセスがIDから取り消されました....次のクエリを実行する方法はありますかMySqlで:MySQLのDROP OR CREATEの代わりに

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

一時テーブルを作成するには、CREATE TEMPORARY TABLES権限が必要です。

簡単な代替手段は、単にテーブルからすべての行を削除するには、次のようになります。

delete from temp; 

またはTRUNCATEを使用する:

truncate table temp; 

が、それは同じ(一時テーブルはセッションごとにあり、正確ではありません、より多くのセッションで競合することなく同じ一時テーブル名を使用できます)。

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 

グループby s.startdatetime;

+0

サブクエリを使用してこれを実行できるはずです。私はグループからcust_ph_noを落としました。何の目的も持たないからです。繰り返し率も常に0に戻りますか? –

+0

それは私に間違った数字を与えています...質問は、リピートの呼び出し元のdatewise合計を実行する必要があります。Aが4回&Bを呼び出すと6回、3 + 5(4-1&6-1) be 3 + 5/total_calls –

関連する問題