MySQL нужна помощь .. как я могу фильтровать макс (дата) - PullRequest
1 голос
/ 24 августа 2009

у меня есть предполагаемая таблица

[таблица а]
UID | UNAME
------------------
001 | а
002 | б
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, предполагается, что если я ввел фильтр, чтобы показать всем пользователям, которые имели lastlogin до '2009/08/03', я хочу результат, подобный этому

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

которые исключают UID 001, потому что 001 имеет lastlogin в 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

как я могу добавить фильтр, чтобы показать только max (logs.date) до 2009/08/03, потому что строка 3 "где max (logs.date) <'2009/08/03' вызывает ошибку недопустимой группы по функция. спасибо </p>

Ответы [ 3 ]

5 голосов
/ 24 августа 2009

Попробуйте это:

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 голосов
/ 24 августа 2009

Вы хотите использовать SQL "имеющий" предложение:

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 голосов
/ 24 августа 2009

Любое условие, использующее функцию группировки, должно быть указано в предложении 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'
...