2012-09-20 4 views
5

Ho questa domanda:mysql Selezionare Selezionare

SELECT DATE(a.created_at) AS order_date, count(*) as cnt_order 
    FROM `sales_order_item` AS a 
    WHERE MONTH(a.created_at) = MONTH(now())-1 
    GROUP BY order_date 

che restituirà risultato qualcosa di simile (istantanee altrimenti tornerà per 31 giorni):

order_date cnt_order 
2012-08-29 580 
2012-08-30 839 
2012-08-31 1075 

e la mia query full sta selezionando basa su sopra selezione:

SELECT order_date 
    , MAX(cnt_order) AS highest_order 
FROM (
     SELECT DATE (a.created_at) AS order_date 
      , count(*) AS cnt_order 
     FROM `sales_order_item` AS a 
     WHERE MONTH(a.created_at) = MONTH(now()) - 1 
     GROUP BY order_date 
    ) AS tmax 

Ma il risultato:

order_date highest_order 
2012-08-01 1075 

Quale ha la data errata e sempre selezionare la prima riga di data in cui supporre 2012-08-31. Forse questo è un semplice errore che non so. Quindi, come ottenere la data giusta per il 2012-08-31? Qualsiasi aiuto sarebbe grande.

+0

avete aggregato il risultato della sottoquery che risulta a valore singolo che a sua volta è corretto. perché vuoi davvero raggiungere? \ –

+0

Per ottenere il conteggio degli ordini più alto da quella sottoquery, come puoi vedere il massimo() farlo correttamente 1075 ma perché la data è sbagliata. – Ardeus

risposta

1

Si potrebbe provare a ordinare il set di risultati della query secondaria; qualcosa di simile:

SELECT 
    DATE (a.created_at) AS order_date, 
    COUNT(*) AS cnt_order 
FROM 
    `sales_order_item` AS a 
WHERE 
    MONTH(a.created_at) = MONTH(now()) - 1 
GROUP BY 
    order_date 
ORDER BY 
    cnt_order DESC 
+0

Questa è la mia seconda volta ho complicato la cosa con sql query, sì, si può ottenere con un semplice semplice come sopra con l'aggiunta ORDER BY cnt_order DESC LIMIT 1, quindi non serve più una super query. – Ardeus

0

È possibile aggiungere ORDER BY order_date DESC in sottoquery.