2013-07-24 4 views
0

У меня есть эти 2 таблицыВыберите список элементов, и если они имеют ту же дату, принимать самые актуальные

Period (idPeriod, startDate, endDate) 
Person (idPerson, name, idPeriod,...otherInfos) 

Мы можем иметь человека во многих периодов по времени. Мой фактический запрос возвращает один человек с самым последним STARTDATE

SELECT * FROM person p INNER JOIN period per on per.idPeriod = org.idPeriod 
where per.endDate = (SELECT MAX(per.startDate) from per) group by name; 

Как получить список лиц. Если человек существует более одного раза, верните его с помощью самого последнего startDate.

ответ

0
SELECT name, idPerson 
FROM Person 
INNER JOIN Period 
ON Person.idPeriod = Period.idPeriod 
WHERE Period.startDate = 
(
    SELECT MIN(startDate) 
    FROM Period AS Per 
    INNER JOIN Person as P 
    ON P.id = Per.id 
    WHERE P.name = Person.name 
) 

fiddled

+0

он работал, но он не принимает во внимание, если человек существует в одном периоде только http://sqlfiddle.com/#!2/bbb85/1 – outellou

+0

@Moh это сломано в вашем случае, потому что вы не добавили этот период в таблицу 'Period' –

+0

Да, я вижу. Он работает http://sqlfiddle.com/#!2/0ab25/1 – outellou

1

Попробуйте это:

SELECT p.name, p.idPerson, MAX(per.startDate) 
FROM person p LEFT JOIN period per on per.idPeriod = org.idPeriod 
GROUP BY p.name, p.idPerson 
+0

Это тоже работало http://sqlfiddle.com/#!2/6605e/1 – outellou

 Смежные вопросы

  • Нет связанных вопросов^_^