1

我有一张像这样假设的桌子

[表a]
UID | UNAME
------------------
001 | 002
| 003
| C

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

我想要这样的
UID 查询 | 上一个日志
--------------------
001 | 2009/08/03
002 | 空
003 | 2009/08/02

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

识别码 | 上一个日志
--------------------
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

如何添加过滤器以仅显示 2009/08/03 之前的 max(logs.date),因为第 3 行“max(logs.date)<'2009/08/03' 会导致错误无效 group by function。谢谢

4

3 回答 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'
于 2009-08-24T01:24:59.693 回答
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'
于 2009-08-24T01:25:45.747 回答
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'

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

于 2009-08-24T01:25:56.760 回答