首页 文章

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

提问于
浏览
1

我有一张这样的表

[表a]
UID | UNAME

001 |一个
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 |空值
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)<'2009/08/03'导致错误无效的按功能分组 . 谢谢

3 回答

  • 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'
    
  • 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”来测试聚合函数的值 .

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

相关问题