У меня есть база данных с 4-мя столами, как показано ниже:SQL присоединяется: группа с порядком
USER table:
* id: INTEGER, AUTO INCREMENT...
* name: VARCHAR
PRODUCT table:
* id: INTEGER, AUTO INCREMENT...
* name: VARCHAR
ORDER table:
* id: INTEGER, AUTO INCREMENT...
* number: VARCHAR
* user_id: FOREIGN KEY to USER table
* date_created: DATETIME
ORDER_TO_PRODUCT table:
* order_id: FOREIGN KEY to ORDER table
* product_id: FOREIGN KEY to PRODUCT table
* quantity: INTEGER
Я хочу создать запрос, который будет список всех пользователей, каждый из которых имеет это последний заказ сделал (согласно order.date_created
) дата и номер.
Моя идея состоит в том, чтобы сгруппировать все результаты от пользователей (сделать одну строку для каждого пользователя), а затем заказать по дате заказа. Однако это, похоже, не работает:
SELECT u.name, o.date_created, o.number
FROM order o
INNER JOIN user u ON o.user_id = u.id
GROUP BY o.user_id
ORDER BY o.created DESC
Вопрос в том, что я делаю это неправильно? И возможно ли достичь цели без подзапросов?
Я думаю, вам нужно добавить подзапрос, но любопытно что другие предлагают. – rainerhahnekamp
Какая ошибка у вас? – genespos
@genespos Я просто их отсортировал неправильно. Похоже, что этап GROUP выполняется как первый, случайные строки помещаются в каждую группу, а затем идет ORDER BY, который упорядочивает эти неправильные элементы. – ducin