2016-05-02 8 views
0

Ist es möglich, die folgenden Abfragen zu kombinieren und das Ergebnis datewise erhalten:MySql-Abfrage mit einer anderen Abfrage zu teilen

Query1

select sum(Repeat_count) from 
    (select cust_ph_no,count(cust_ph_no) as Repeat_Count 
    from call_data  
    where date(call_start_date_time) = CURDATE()-1 
     and campaign_name = 'VT' and report_Id LIKE -2 
     and call_status_disposition not like 'supervised_transfer' 
     and campaign_type = 'IB'  
GROUP BY 1 
HAVING (Repeat_Count > 1))temp; 

Query2

select 
    SUM(IF(call_status_disposition <> 'lt',1,0)) AS Offered 
from call_data 
where date(call_start_date_time) = curdate()-1 and 
     campaign_name = 'VT' and 
    report_Id LIKE -2 and 
    call_status_disposition not like 'supervised_transfer' and campaign_type = 'IB'; 

Query1 Ergebnis ---> 350

Frage2 Ergebnis ---> 1355

Was ich will ist .... eine Abfrage, die Query1/Query2 (350/1355 = 26%) teilen kann.

Und auch wenn ich dieses Datum weise bekommen kann (derzeit verwende ich CURDATE() - 1).

Spalte Datum ist call_start_date_time

Dank

+0

Bitte Hilfe .... –

Antwort

0

Es ist ziemlich einfach.

Wenn Sie nur eine Zeile in jeder Reihe haben Sie die folgende Konstruktion verwenden können:

select (select 1)/(select 2); 

0.5000 

Hinweis, jede Unterabfrage darf nur 1 Zeile zurückgeben.

Also habe ich versucht, Ihnen zu schreiben abfragen:

select DATE_ADD(curdate(), INTERVAL @rownum + 1 day), 
     (
      select sum(Repeat_count) 
      from 
       (select cust_ph_no,count(cust_ph_no) as Repeat_Count 
       from call_data  
       where date(call_start_date_time) = DATE_ADD(curdate(), INTERVAL @rownum + 1 day) 
         and campaign_name = 'VT' and report_Id LIKE -2 
         and call_status_disposition not like 'supervised_transfer' 
         and campaign_type = 'IB'  
      GROUP BY 1 
      HAVING (Repeat_Count > 1))temp 
     )/ 
     (
     select 
      SUM(IF(call_status_disposition <> 'lt',1,0)) AS Offered 
      from call_data 
      where date(call_start_date_time) = DATE_ADD(curdate(), INTERVAL @rownum + 1 day) and 
       campaign_name = 'VT' and 
       report_Id LIKE -2 and 
       call_status_disposition not like 'supervised_transfer' and campaign_type = 'IB' 
     ), 
     @rownum := @rownum + 1 AS rank 
from information_schema.CHARACTER_SETS 
     join (SELECT @rownum := 0) r 

Achten Sie auf die folgenden Punkte:

DATE_ADD(curdate(), INTERVAL @rownum + 1 day) 

Aktuelles Datum, ich zum Beispiel das aktuelle Datum verwendet. Sie können etwas anderes auswählen.

INTERVAL @rownum + 1 day 

Ermöglicht die Auswahl des nächsten Datums für die neue Zeile.

Ich habe keine Daten und diese Abfrage kann einige Fehler haben, weil ich es nicht überprüfen kann.

+0

Dies funktioniert perfekt, wenn ich nur für einen Tag Ausgabe brauche, aber ich möchte Ausgabe datewise. –

Verwandte Themen