使用MySQL,我想重构以下SELECT
语句返回包含最新invoice_date
的整个记录:如何选择整个记录使用MAX()当与GROUP BY
> 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)不是包含MAX(invoice_date)
(3295)的记录的id
,它是初始查询中第一条记录的id
。
如何重构此查询以给我包含MAX(invoice_date)
的整个记录?
该解决方案必须使用GROUP BY子句,因为我需要为每个发票获取最新的invoice_date
。
这似乎需要工作但它是慢得令人难以置信。这真的可以比在MySQL上使用GROUP BY更好的解决方案吗? – rswolff 2009-12-18 22:59:56
试试看看。不要忘记用'EXPLAIN'分析两个查询。 – 2009-12-18 23:12:55