Используя MYSQL, я хотел бы провести рефакторинг следующего оператора SELECT
, чтобы получить всю запись , содержащую самые новые invoice_date
:
> SELECT id, invoice, invoice_date
FROM invoice_items
WHERE lot = 1047
id invoice_id invoice_date
-----------------------------------
3235 1047 2009-12-15 11:40:00
3295 1047 2009-12-15 16:00:00
3311 1047 2009-12-15 09:30:00
3340 1047 2009-12-15 13:50:00
Использование агрегатной функции MAX () и предложения GROUP BY помогает мне в этом:
> SELECT id, invoice_id, max(invoice_date)
FROM invoice_items
WHERE invoice_id = 1047
GROUP BY invoice_id
id invoice_id invoice_date
-----------------------------------
3235 1047 2009-12-15 16:00:00
Обратите внимание, что запрос, кажется, правильно получает MAX(invoice_date)
, но возвращаемое id
(3235) - это не id
записи, содержащей MAX(invoice_date)
(3295), это id
Первая запись в начальном запросе.
Как мне провести рефакторинг этого запроса, чтобы получить полную запись , содержащую MAX(invoice_date)
?
Решение должно использовать предложение GROUP BY, потому что мне нужно получить новейшие invoice_date
для каждого счета.