У меня есть таблица:Как найти следующее значение в таблице на основе определенных критериев
ID | Name | Date
1 | ABC | 2015-01-01
2 | XYZ | 2015-01-02
3 | ABC | 2015-01-03
4 | ABC | 2015-01-04
Я хочу, чтобы запросить эту таблицу таким образом, что результат становится:
ID | Name | Date | NextDate
1 | ABC | 2015-01-01 | 2015-01-03
2 | XYZ | 2015-01-02 | null
3 | ABC | 2015-01-03 | 2015-01-04
4 | ABC | 2015-01-04 | null
One Раствор равен:
select t1.*,
(select min(t2.Date) from TAB t2 where t2.ID > t1.ID t2.Name = t1.Name) NextDate
from TAB t1
Но это очень медленно, поскольку мы выполняем агрегацию в каждой строке. Есть ли альтернативное решение для этого, которое более эффективно, чем указано выше?
Любой шанс модернизировать ваш SQL Server 2008 к 2012 или новее? Функция ['lead'] (https://msdn.microsoft.com/en-us/library/hh213125.aspx), похоже, точно соответствует вашему счету. – Mureinik