MySQL - 在where子句中引用聚合列

时间:2013-02-01 02:08:46

标签: mysql sql max aggregate

这看起来很简单,但我似乎无法在不进行子查询的情况下解决这个问题(这似乎会显着减慢查询速度 - 需要大约10秒而不是< 1)。

假设我有一张已发送文件的表格,我想选择自上次发送以来已更新的文件以及从未发送过的文件。

SELECT d.document_id, max(sd.document_sent_date) as last_sent_date
FROM documents d
LEFT JOIN sent_documents sd ON d.document_id=sd.document_id
WHERE last_sent_date is NULL OR last_sent_date<d.last_updated
GROUP BY d.document_id

这样的事情可能吗?基本上,我想在where子句中使用max()的结果。

1 个答案:

答案 0 :(得分:5)

您需要having子句。

一般规则:where聚合之前的日期运行,having聚合之后对数据进行操作。