2015-12-03 4 views
1

У меня есть следующий запрос:Сортировать по алфавиту в MySQL

SELECT u.first_name, o.created_at FROM user AS u INNER JOIN order AS o ON o.user_id = u.id GROUP BY u.id

Структура данных выглядит следующим образом:

user 1

  • order 1 order 2 order 3

user 2

  • order 1

user 3

  • order 1order 2

user 4

  • order 1order 2order 3order 4order 5

В настоящее время запрос возвращает данные следующим образом:

user 1>order 1

user 2>order 1

user 3>order 1

user 4>order 1

, но я хотел бы иметь все последние элементы порядка пользователя, как в примере ниже:

user 1>order 3

user 2>order 1

user 3>order 2

user 4>order 5

Есть ли способ, чтобы получить это хорошо? Мне нужно получить последний заказ каждого пользователя для создания отчета.

ответ

1

Попробуйте этот вопрос: -

SELECT u.first_name, o.created_at 
FROM user AS u 
INNER JOIN order AS o ON o.user_id = u.id 
Where o.created_at=(SELECT MAX(o2.created_at) 
        FROM order o2 
        WHERE o.user_id = o2.user_id); 
GROUP BY u.id 

это SELECT MAX(o2.created_at) использовать для получения MAX created_at

+0

Я думаю, что это должно быть WHERE o.user_id = o2.user_id в Выбор o.created_at, потому что только то он возвращает правильные результаты, правильно? – undefinedman

+0

да ... извините мою ошибку, я обновляю свой ответ @GrzegorzTomasiak –

0
SELECT u.first_name, max(o.created_at) as max_created_at 
FROM user u 
INNER JOIN order AS o ON o.user_id = u.id 
GROUP BY u.id 
+0

Это работает для простого запроса, но если у меня больше внутренних объединений, например, из чего пришел заказ магазина, тогда он присоединяется к неправильному магазину (от первого порядка, не последний) – undefinedman

+0

@grzegorz Задайте другой вопрос, получите другой ответ. – RedFilter

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