2012-09-20 21 views
5

mam tej kwerendy:mysql Wybierz z Select

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 

która będzie zwracać wynik coś takiego (snapshot tylko inaczej wróci za 31 dni):

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

i moje pełne zapytanie jest wybranie na podstawie powyższego wybór:

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 

Ale to skutkować:

order_date highest_order 
2012-08-01 1075 

Która ma nieprawidłową datę i zawsze wybieraj pierwszy wiersz daty, w którym przypuszczalnie 2012-08-31. Może to prosty błąd, którego nie znam. Jak więc uzyskać poprawną datę na lata 2012-08-31? Każda pomoc byłaby świetna.

+0

sumujesz wynik z podzapytania, który powoduje pojedynczą wartość, która z kolei również jest prawidłowa. dlaczego tak naprawdę chcesz osiągnąć? \ –

+0

Aby uzyskać najwyższy porządek z tego podkwerendy, jak można zobaczyć max() uzyskać prawo 1075, ale dlaczego data jest błędna. – Ardeus

Odpowiedz

1

Możesz spróbować zamówić zestaw wyników zapytania podrzędnego; coś takiego:

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

To jest mój drugi raz, gdy komplikuję sprawę z zapytaniem sql, tak można to osiągnąć tak samo jak powyżej z dodaniem ORDER BY cnt_order DESC LIMIT 1, więc nie trzeba już więcej super-zapytania. – Ardeus

0

Możesz dodać ORDER BY order_date DESC w podzapytania.