mysql从Select中选择

Ard*_*eus 5 mysql select subquery

我有这个问题:

    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
Run Code Online (Sandbox Code Playgroud)

这将返回类似这样的结果(否则快照只返回31天):

order_date  cnt_order 
2012-08-29  580
2012-08-30  839
2012-08-31  1075
Run Code Online (Sandbox Code Playgroud)

我的完整查询是根据以上选择选择的:

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
Run Code Online (Sandbox Code Playgroud)

但结果是:

order_date  highest_order
2012-08-01  1075
Run Code Online (Sandbox Code Playgroud)

哪个日期错了,总是选择2012-08-31的第一行日期.也许这是一个我不知道的简单错误.那么如何将日期指向2012-08-31呢?任何帮助都会很棒.

Zak*_*aki 1

您可以尝试对子查询结果集进行排序;就像是:

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
Run Code Online (Sandbox Code Playgroud)