2009-08-24 59 views
1

我有一个表假定这样的MySQL需要帮助。我怎么可以过滤最大(日)

[表]
UID | UNAME
------------------
001 | a
002 | b
003 | c

[表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 ',我想要这样的结果

UID | LASTLOG
--------------------
003 | 2009/08/02

其消除UID 001,因为001已经在2009/08/03

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

我如何添加一个过滤器,只显示最大值(logs.date)2009/08/03之前,因为管线3“其中,max(logs.date)< '2009/08/03' 由函数导致错误无效组 感谢

回答

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' 
+0

雅是结果没有错误,但与lastlogin 2009/08/03 uid 001仍然出现..有声明不做过滤? – 2009-08-24 01:37:12

+1

由于您使用字符串来表示日期,而不是MySQL的内置日期类型,可能在'2009/08/03'字符串的末尾有一个空格? ('2009/08/03'在技术上大于'2009/08/03') – VoteyDisciple 2009-08-24 01:50:35

+0

ohmygosh .. thx,它解决了!我使用日期类型变量,但它是关于分隔符。 mysql不使用'/'但'''大声笑.. tq所有家伙=) – 2009-08-24 01:55:32

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' 
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' 

你需要使用“具有“而不是”在哪里“来测试集合函数的价值。

+0

雅它消除了错误,但为什么UID 001与2009/08/03仍然出现?日期类型是否有例外情况? – 2009-08-24 01:43:38