Оптимизация подзапроса для поиска записей в другой таблице на основе дат, не относящихся к последним 360 дням - PullRequest
0 голосов
/ 09 февраля 2012

Проблема: Найдите людей, чьи дни рождения завтра (таблица a), у которых нет записи с датой выпуска, установленной за последние 360 дней из (таблица b)

Table a
ID, DOB

Table b
ID, PID, Issued

У меня естьзапрос, но он довольно медленный, не уверен, что соединение будет быстрее - любая помощь приветствуется ..

SELECT a.ID, a.DOB FROM a
WHERE MONTH(a.DOB)=MONTH(now()) # match month
AND DAYOFMONTH(a.DOB)=DAYOFMONTH(now()+ INTERVAL 1 DAY) # match day of month
AND (
 SELECT COUNT(*) FROM b 
 WHERE b.PID = a.ID 
 AND b.Issued < DATE_SUB(SYSDATE(), INTERVAL 360 DAY) 
) < 1 # hacky subquery to find not issued in past 360 days

1 Ответ

3 голосов
/ 09 февраля 2012
SELECT      *
FROM        A
LEFT JOIN   B
        ON  A.Id = B.PID AND B.Issued >= DATE_SUB(CURDATE(), INTERVAL 360 DAY)
WHERE       B.ID IS NULL AND
            DATE_ADD(A.DOB, INTERVAL YEAR(CURDATE()) - YEAR(A.DOB) YEAR) = 
            DATE_ADD(CURDATE(), INTERVAL 1 DAY)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...