2015-02-28 1 views
0

Я пытаюсь придумать один запрос, который будет принимать следующую таблицу (названный sales):MYSQL SUM с внутренним Выбор возвращения МАХ Дата

user_id | order_total | order_date | 
    1 |  100  | 2012-01-01 | 
    1 |  200  | 2013-06-04 | 
    1 |  150  | 2012-01-08 | 
    2 |  100  | 2015-02-01 | 
    3 |  105  | 2014-10-27 | 

И возвратит следующее:

user_id | order_total | num_orders | last_order | 
    1 |  450  |  3   | 2013-06-04 | 
    3 |  105  |  1   | 2014-10-27 | 
    2 |  100  |  1   | 2015-02-01 | 

до сих пор я придумал следующий SQL, чтобы получить результат:

SELECT 
DISTINCT a.user_id, 
SUM(order_total) AS order_total, 
COUNT(*) AS num_orders, 
b.order_date as last_order 
FROM 
    `sales` AS a, 
    (
     SELECT 
     order_date, 
     user_id 
     FROM `sales` 
     ORDER BY order_date DESC 
    ) AS b 
WHERE a.user_id = b.user_id 
GROUP BY user_id 
ORDER BY order_total DESC 

р- РОБЛЕМА, однако, что она возвращает:

user_id | order_total | num_orders | last_order | 
    1 |  1350  |  9   | 2013-06-04 | 
    3 |  105  |  1   | 2014-10-27 | 
    2 |  100  |  1   | 2015-02-01 | 

Есть ли какой-нибудь способ, чтобы предотвратить суб-запрос от влияния на результаты Сум и граф? Или я об этом ошибаюсь?

+0

Попробуйте указать, с помощью которого user_id вам группа - a.user_id или b.user_id –

+0

Дата последнего заказа на 1 является 2013-06-04? Или 2015-01-08? –

+0

@GiorgiNakeuri извините, моя ошибка - я скорректировал данные примера. – user984976

ответ

5

Почему вы используете подзаголовок?

SELECT user_id, 
SUM(order_total) AS order_total, 
MAX(order_date) AS lastOrder, 
COUNT(*) AS num_orders 
FROM table 
GROUP BY user_id 
ORDER BY order_total DESC 
+0

заказать by_total DESC – Strawberry

+0

@Strawberry: thx. Не видел, что он хочет заказать :) – chresse

+1

Ничего себе. Я действительно сделал еду из этого ... спасибо помощнику. – user984976

Смежные вопросы