У меня есть много таблиц, которые регистрируют действия пользователей на каком-то форуме, каждое событие журнала имеет свою дату. Мне нужен запрос, который даст мне всех пользователей, которые не были активны в течение последнего года. У меня есть следующий запрос (рабочий запрос):
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, а затем проверяю каждый столбец даты по отдельности, чтобы узнать, прошло ли больше года
Мне было интересно, есть ли способ сделать это проще, например, найти максимум между всеми датами (последняя дата) и сравнить только эту с текущей датой.
UNION
вместоJOIN
, также научитесь форматировать свой код, чтобы он был читабельным с минимальными усилиями со стороны читателей, так как этот кусок беспорядка не стоит анализировать, чтобы дать полный реальный ответ! Никто не будет прилагать к ответу больше усилий, чем вы приложили к своему вопросу, на данный момент это очень мало. - person   schedule 27.04.2013