Мне нужно сделать несколько соединений с одной и той же таблицей между (например) Person и PersonEvents. Для каждого человека существует несколько событий (0 или более). Мне нужно создать VIEW, который выбирает каждого человека с определенными столбцами из своего последнего события, а также столбцы из следующего самого последнего события.SQL с несколькими ROW_NUMBER или RANK
Person данные:
Id Name
1 Iain
2 Fred
3 Mary
4 Foo
5 Bar
PersonEvents данные:
PersonId DateStarted ReasonForLeaving
1 2011-03-12 00:00:00.000 sick
1 2013-02-12 00:00:00.000 NULL
1 2012-04-12 00:00:00.000 holiday
2 2011-05-12 00:00:00.000 new baby
2 2013-06-12 00:00:00.000 NULL
2 2012-07-12 00:00:00.000 had enough
3 2011-08-12 00:00:00.000 pregnant
3 2013-09-12 00:00:00.000 NULL
4 2012-10-12 00:00:00.000 NULL
Выходной образец будет:
Id Name MemberSince ReasonForChange
1 Iain 2011-03-12 00:00:00.000 holiday
4 Foo 2012-10-12 00:00:00.000 NULL
...
"Старый путь" использовали топ 1 или присоединиться к суб- выписка:
SELECT p.*,
(
SELECT TOP 1 DateStarted
FROM PersonEvents e
WHERE e.PersonId = p.Id
ORDER BY DateFoo DESC
) As MemberSince
FROM Person p
....
Однако, если вам нужно несколько столбцов из этого Объединения (например, дата, комментарий и, возможно, дальнейшие идентификаторы), вам нужно сделать несколько инструкций подвыбора, что дорого.
Итак, вопрос: Как вы получаете несколько столбцов из соединения, используя номер строки для последних и предыдущих событий?
почему -1 на этом? – thinkOfaNumber