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あなたのクエリで使用しないのかわかりません...第二に、減算自体を日数に変換するのに十分なはずです...第三に、からの条件がWHERE入る必要がありHAVINGます...第四に、私dateSELECTまた、逃げる...それは可能性があります:

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のような集計関数を使用する場合、WHEREではなくHAVINGを使用する必要があります。同じコマンドで両方を使用することは可能ですが、HAVINGは常にWHEREとGROUPBYの後にあります。

詳細情報:http ://www.w3schools.com/sql/sql_having.asp

于 2012-11-19T16:44:38.450 に答える