MySQL需要帮助..如何过滤max(date)

时间:2009-08-24 01:21:38

标签: sql mysql syntax max

我有一张像这样的表

[表a]
UID | UNAME
------------------
001 |一个
002 | b
003 | Ç

[表b]
UID |日志
----------------------
001 | 2009/08/01
001 | 2009/08/03
003 | 2009/08/02

我希望得到像这样的查询 UID | lastlog的
--------------------
001 | 2009/08/03
002 | NULL
003 | 2009/08/02

结果我已经完成了,但我遇到了一个问题,而我想添加过滤器lastlogin,假设我输入过滤器显示所有在'2009/08/03之前有lastlogin的用户,我想要这样的结果

UID | lastlog的
--------------------
003 | 2009/08/02

消除了UID 001,因为001在2009/08/03有最后一次登录

我使用像这样的SQL命令

SELECT a.uid, max(logs.date)
FROM user a LEFT JOIN logs ON (a.uid = logs.uid)
where max(logs.date)<'2009/08/03'
group by a.uid

如何在2009/08/03之前添加过滤器以仅显示max(logs.date),因为第3行“其中max(logs.date)&lt;'2009/08/03'导致错误无效组按功能。 感谢

3 个答案:

答案 0 :(得分:5)

试试这个:

SELECT a.uid, max(logs.date)
FROM user a LEFT JOIN logs ON (a.uid = logs.uid)
group by a.uid
having max(logs.date)<'2009/08/03'

答案 1 :(得分:3)

使用分组函数的任何条件都需要像HAVING子句那样进入:

SELECT a.uid, max(logs.date)
FROM user a LEFT JOIN logs ON (a.uid = logs.uid)
GROUP BY a.uid
HAVING MAX(logs.date)<'2009/08/03'

答案 2 :(得分:3)

您想使用SQL "having"子句:

SELECT a.uid, max(logs.date)
FROM user a LEFT JOIN logs ON (a.uid = logs.uid)
group by a.uid
having max(logs.date) < '2009/08/03'

您需要使用“having”而不是“where”来测试聚合函数的值。