0

这是我的问题,我有这个请求(它有效),但我想用TO_DAYS(notification.created_at)用户的最新操作替换。

我尝试使用TO_DAYS(MAX(notification.created_at))但它返回"#1111 - Invalid use of group function".

SELECT user.email, notification.type, max(notification.created_at) AS date 
    FROM user, notification 
    WHERE (user.id = notification.user_id) AND (TO_DAYS(NOW()) - TO_DAYS(notification.created_at) >= 30)
    GROUP BY user.id 
    ORDER BY `date` DESC
4

2 回答 2

1

首先,我不明白为什么不在LEFT JOIN您的查询中使用...其次,将减法本身转换为天数就足够了...第三,该条件 fromWHERE应该进入HAVING...第四,我想dateinSELECT也应该被逃脱......它可能是:

SELECT u.email, n.type, max(n.created_at) AS `date`
FROM user u
LEFT JOIN notification n ON u.id = n.user_id
GROUP BY user.id 
HAVING TO_DAYS(NOW() - MAX(n.created_at)) >= 30
ORDER BY `date` DESC

试试这个...

于 2012-11-19T16:29:31.817 回答
0

使用 MAX 之类的聚合函数时,必须使用 HAVING 而不是 WHERE,可以在同一命令上同时使用两者,但是 HAVING 总是在 WHERE 和 GROUP BY 之后。

欲了解更多信息:http ://www.w3schools.com/sql/sql_having.asp

于 2012-11-19T16:44:38.450 回答