После нескольких часов поиска я наконец сдаюсь и прошу помощи.Я нашел кое-что, что сближает меня, но, кажется, не работает должным образом.
В основном ищет пользователей, которые используют нас 3-6 месяцев назад, но не используют в последние 3 месяца.
Для примера предположим, что у меня есть две таблицы с именем event (id, clientFK, inserttion_date, officeFK) и client (id, name):
SELECT DISTINCT e.id, e.insertion_date, c.name
FROM event e
LEFT JOIN client c ON c.id = e.clientFK
WHERE e.id NOT IN (
SELECT e.id
FROM event e
WHERE e.insertion_date
BETWEEN (
NOW( ) - INTERVAL 3
MONTH
)
AND NOW( )
)
AND e.insertion_date > ( NOW( ) - INTERVAL 6
MONTH )
AND officeFK =1
ORDER BY e.insertion_date DESC
** ОБНОВЛЕНИЕ *** id - это просто автоинкрементный столбец, поэтому, очевидно, он никогда не будет отображаться с использованием приведенной выше логики.Я имел в виду поиск clientFK в таблице событий.Исходя из первого ответа, приведенного ниже, я пришел к следующему:
SELECT DISTINCT e.clientFK, e.insertion_date, c.name
FROM event e
LEFT JOIN client c ON c.id = e.clientFK
WHERE e.clientFK NOT IN (
SELECT e.clientFK FROM event e
WHERE e.insertion_date > (NOW() - INTERVAL 3 DAY)
)
AND e.insertion_date BETWEEN (NOW() - INTERVAL 3 DAY) AND (NOW() - INTERVAL 6 MONTH)
AND officeFK =1
ORDER BY e.insertion_date DESC
Однако, даже если сузить подзапрос NOT IN до 3 дней, я все равно возвращаю 0 строк.Изменение NOT IN на IN также приводит к возвращению 0 строк.В моей таблице событий есть тысячи строк, где clientFK "NOT IN" последние 3 дня.Я должен сделать что-то не так.
ПРАВИЛЬНЫЙ КОД НИЖЕ:
SELECT DISTINCT e.id, e.insertion_date, c.name
FROM event e
JOIN client c ON c.id = e.clientFK
WHERE e.clientFK NOT IN (
SELECT e.clientFK FROM event e
WHERE e.insertion_date > (NOW() - INTERVAL 3 MONTH)
)
AND e.insertion_date < (NOW() - INTERVAL 3 MONTH)
AND insertion_date > (NOW() - INTERVAL 6 MONTH)
AND e.officeFK = 1
ORDER BY e.insertion_date DESC