2010-10-25 6 views
1

après plusieurs tentatives, je ne peux pas résoudre ce problème. J'ai la requête mysql suivante:Groupe Mysql par l'aide

SELECT 
        date_format(connect_time,"%Y-%m-%d %H") AS date, 
        NotConnected, 
        count(id) as calls, 
        sum(`duration`)/60 as minutes 
    FROM test.`CDR_Vendors`, 

    (SELECT   
     date_format(connect_time,"%Y-%m-%d %H") AS date, 
     Count(id) as NotConnected 
     FROM `CDR_Vendors_Failed` 
     inner join Vendors on (CDR_Vendors_Failed.i_vendor = Vendors.i_vendor) 
     inner join Customers on (CDR_Vendors_Failed.i_customer = Customers.i_customer) 
     WHERE 
     Customers.name like "W%" 
     and 
     Vendors.name like "D%" 
     and connect_time between curdate() and now() 
     GROUP by date 
     ORDER BY date 

    )Failed 
     inner join Vendors on (CDR_Vendors.i_vendor = Vendors.i_vendor) 
     inner join Customers on (CDR_Vendors.i_customer = Customers.i_customer) 
     WHERE 
     Customers.name like "W%" 
     and 
     Vendors.name like "D%" 
     and connect_time between curdate() and now() 
     GROUP by date 
     ORDER BY date 

Le résultat:

date,Notconnected,calls, minutes 
'2010-10-25 00', 408, 900, 6611.00 
'2010-10-25 01', 408, 456, 2777.60 
'2010-10-25 02', 408, 204, 1545.80 
'2010-10-25 03', 408, 108, 1951.80 
'2010-10-25 04', 408, 192, 895.60 
'2010-10-25 05', 408, 300, 544.20 
'2010-10-25 06', 408, 540, 961.20 
'2010-10-25 07', 408, 1728, 5027.60 
'2010-10-25 08', 408, 4968, 20986.40 
'2010-10-25 09', 408, 7884, 33065.00 
'2010-10-25 10', 408, 7836, 28182.20 
'2010-10-25 11', 408, 1800, 3587.80 

je remarquai que la première valeur de champ NotConnected est répété.

comment puis-je résoudre ce problème?

Répondre

0

Cette requête sera très lente. Dans quelle table avez-vous le champ connect_time? Si dans CDR_Vendoes et CRD_Vendors_Failed, vous n'avez pas besoin de sous-requête.

Peut-être que vous avez besoin de rejoindre la table CDR_Vendors_Failed?

SELECT 
        date_format(connect_time,"%Y-%m-%d %H") AS date, 
        Failed.NotConnected, 
        count(id) as calls, 
        sum(`duration`)/60 as minutes 
    FROM test.`CDR_Vendors` 
     inner join Vendors on (CDR_Vendors.i_vendor = Vendors.i_vendor) 
     inner join Customers on (CDR_Vendors.i_customer = Customers.i_customer) 
     inner join 
      (SELECT   
       date_format(connect_time,"%Y-%m-%d %H") AS date, 
       Count(id) as NotConnected 
       FROM `CDR_Vendors_Failed` 
       inner join Vendors on (CDR_Vendors_Failed.i_vendor = Vendors.i_vendor) 
       inner join Customers on (CDR_Vendors_Failed.i_customer = Customers.i_customer) 
       WHERE 
       Customers.name like "W%" 
       and 
       Vendors.name like "D%" 
       and connect_time between curdate() and now() 
       GROUP by date 
       ORDER BY date 
      )Failed on Failed.date = date_format(connect_time,"%Y-%m-%d %H") 
     WHERE 
     Customers.name like "W%" 
     and 
     Vendors.name like "D%" 
     and connect_time between curdate() and now() 
     GROUP by date 
     ORDER BY date 
+0

oui, chaque table contient le champ « connect_time » – hch

+0

vous n'avez pas besoin de ce grand sous-requête, se joindre à cdr_vendors_failed est assez – ksogor

+0

la requête est très lent, comment puis-je joindre à cdr_vendors_failed? – hch