mysql从选择中选择

mysql从选择中选择,mysql,select,subquery,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 这将返回类似于以下内容的结果(只有快照才会每31天返回一次): 我的完整查询是根据上述选择进行选择的: SELECT orde

我有一个疑问:

    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
这将返回类似于以下内容的结果(只有快照才会每31天返回一次):

我的完整查询是根据上述选择进行选择的:

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
但结果是:

order_date  highest_order
2012-08-01  1075

它的日期错误,并且总是选择假设为2012-08-31的第一行日期。也许这是一个我不知道的简单错误。那么,如何将日期准确地定在2012-08-31呢?任何帮助都会很好。

您可以尝试对子查询结果集进行排序;比如:

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

您可以在子查询中添加
ORDER BY ORDER\u date DESC

您已经聚合了子查询的结果,结果是单个值,而这个值反过来也是正确的。为什么您真的要实现?\要从该子查询中获得最高的顺序计数,正如您可以看到的max()使其正确1075,但为什么日期是错误的。这是我第二次使用sql查询使事情复杂化,是的,它可以通过如上所述的简单方法通过cnt_order DESC LIMIT 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