2012-09-20 34 views
5

tengo esta consulta:MySQL Seleccionar desde: Seleccionar

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 

que devolverá resultado algo como esto (instantánea de otro modo sólo volverá por 31 días):

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

y mi consulta completa es seleccionar basa en la selección anterior:

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 

Pero el resultado:

order_date highest_order 
2012-08-01 1075 

que tiene la fecha incorrecta y siempre elige la primera fila de fecha donde suponga 2012-08-31. Tal vez este es un error simple que no sé. Entonces, ¿cómo obtener la fecha adecuada para 2012-08-31? Cualquier ayuda sería genial.

+0

ha agregado el resultado de la subconsulta, que da como resultado un valor único que a su vez también es correcto. ¿Por qué realmente quieres lograr? \ –

+0

Para obtener el mayor recuento de pedidos de esa subconsulta, como puedes ver el máximo() hazlo bien 1075 pero por qué la fecha es incorrecta. – Ardeus

Respuesta

1

Puede intentar ordenar el conjunto de resultados de la sub consulta; algo así como:

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

Esta es mi segunda vez que he complicado algo con la consulta sql, sí, se puede lograr con tan simple como el anterior con la adición ORDER BY cnt_order DESC LIMIT 1, por lo que no es necesario realizar más consultas. – Ardeus

0

Puede añadir ORDER BY order_date DESC en subconsulta.