2012-09-20 40 views
5

Tôi có truy vấn này:mysql Chọn từ Chọn

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 

mà sẽ trả về kết quả như thế này (ảnh chụp chỉ khác sẽ trở lại mỗi 31 ngày):

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

và truy vấn đầy đủ của tôi là lựa chọn dựa trên lựa chọn ở trên:

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 

Nhưng kết quả:

order_date highest_order 
2012-08-01 1075 

Ngày nào có ngày sai và luôn chọn hàng đầu tiên của ngày giả sử ngày 2012-08-31. Có lẽ đây là một lỗi đơn giản mà tôi không biết. Vì vậy, làm thế nào để có được ngày đúng điểm đến 2012-08-31? Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời.

+0

bạn đã tổng hợp kết quả từ truy vấn phụ mà kết quả giá trị duy nhất mà đến lượt nó cũng chính xác. tại sao bạn thực sự muốn đạt được? \ –

+0

Để nhận được số lượng đơn đặt hàng cao nhất từ ​​truy vấn con đó, bạn có thể thấy giá thầu tối đa() nhận được đúng 1075 nhưng tại sao ngày đó sai. – Ardeus

Trả lời

1

Bạn có thể thử đặt hàng bộ kết quả truy vấn phụ; một cái gì đó như:

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

Đây là lần thứ hai tôi phức tạp với truy vấn sql, vâng nó có thể đạt được với chỉ đơn giản như trên với bổ sung ORDER BY cnt_order DESC LIMIT 1, vì vậy không cần siêu truy vấn cần thiết. – Ardeus

0

Bạn có thể thêm ORDER BY order_date DESC vào truy vấn phụ.