使用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