いくつかのフォーラムでユーザーのアクションを記録する多くのテーブルがあり、各ログイベントには日付があります。昨年アクティブではなかったすべてのユーザーを取得するクエリが必要です。次のクエリがあります(作業クエリ):
SELECT *
FROM (questions AS q
INNER JOIN Answers AS a
INNER JOIN bestAnswerByPoll AS p
INNER JOIN answerThumbRank AS t
INNER JOIN notes AS n
INNER JOIN interestingQuestion AS i ON q.user_id = a.user_id
AND a.user_id = p.user_id
AND p.user_id = t.user_id
AND t.user_id = n.user_id
AND n.user_id = i.user_id)
WHERE DATEDIFF(CURDATE(),q.date)>365
AND DATEDIFF(CURDATE(),a.date)>365
AND DATEDIFF(CURDATE(),p.date)>365
AND DATEDIFF(CURDATE(),t.date)>365
AND DATEDIFF(CURDATE(),n.date)>365
AND DATEDIFF(CURDATE(),i.date)>365
そのクエリで何をしているのか-userIdに従ってすべてのテーブルを結合し、各日付列を個別にチェックして、1年以上経過しているかどうかを確認します
すべての日付(最新の日付)の間の最大値を見つけて、これだけを現在の日付と比較するなど、もっと簡単にする方法があるかどうか疑問に思っていました