我有一张像这样的表
[表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'导致错误无效组按功能。 感谢
答案 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”来测试聚合函数的值。