RowId | ID | Date
1 1 2007
2 1 2008
3 1 2009
4 2 2001
5 1 2010
охота получить такого типа:
RowId | ID | FromDate | ToDate
1 1 2007 2008
2 1 2008 2009
3 1 2009 2010
5 1 2010 NULL
4 2 2001 NULL
можно сделать через ранкинг функции... есть чтото проще что меньше ресурсов пожрет? след квери делает два тейбл скана и сорта...
Код: Выделить всё
select
s.rowid,
s.id,
s.archivedtim,
s.archivedtim as start_time,
d.archivedtim as end_time
from
(select *, rank() over (partition by id order by rowid) as sa_rankid from test with (nolock)) s
left join (select *, rank() over (partition by id order by rowid) as sa_rankid from test with (nolock)) d on d.id = s.id and d.sa_rankid = s.sa_rankid + 1
ну есть головы?
