Помогите реализовать логику в одном запросе

Ekklipce

Новичок
Помогите реализовать логику в одном запросе

2 таблицы:

link_tracking_report tr (alias)
--id----------date
--1-----------2007-02-02
--2-----------2007-07-24

link_tracking_links tn (alias)
id--report_id----url

связь (tn.report_id = tr.id) where tn.report_id = самый последний по дате репорт.

Если url с последнего репорта присутствует в предпоследнем репорте - status = old.
Если url с последнего репорта отсутствует в предпоследнем репорте - status = new.

Вышеописанная задача лихо решалась с помощью left join link_tracking_links tn1 on (tn1.url = tn.url and tn1.report_id = 'ID_репорта' ).

Вопрос же в следующем. Нужно показать линки, с предыдущего репорта, которых нет в самом последнем репорте, у таких будет status = dead.

Как это покрасивее сделать ?

ЗЫ. union не предлагать.

-~{}~ 24.07.07 18:00:

задача решена, всем спасибо, кто очень сильно думал, хотел ответить и не ответил :)
 

alpine

Новичок
Если кому интересен вариант решения построенный на джоинах:
[sql]
SELECT
l.* , IF(l2.id IS NULL, 'new', IF(l3.id IS NULL, 'dead', 'old')) as `status`
FROM links as l
LEFT JOIN links as l2 ON(l.url=l2.url and l2.report_id=2)
LEFT JOIN links as l3 ON(l2.url=l3.url and l3.report_id=1)
WHERE l.report_id IN(1,2)
HAVING (l.report_id=1 OR `status`='dead')
ORDER BY report_id DESC;
[/sql]
где 1 - id последнего репорта, а 2 - предпоследнего.
 
Сверху