Увеличение значения строки на результат предыдущей строки

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

Мне нужна помощь с одним сценарием. У меня есть таблица, подобная этой.

 DateFrom    DateTo
1.1.2013    5.1.2013
2.3.2013    5.3.2013
25.5.2013   5.6.2013
.
.
  

И мне нужен скрипт с этим результатом.

 DateFrom    DateTo     Result 
1.1.2013    5.1.2013    5       - DateTo - DateFrom     
2.3.2013    5.3.2013    9       - DateTo - DateFrom   Result from previous row
25.5.2013   5.6.2013    21      - DateTo - DateFrom   Result from previous row
  

Спасибо за помощь.

Ответ №1:

Поскольку у вас есть предыдущий, если вы используете SQL Server 2012 или новее, вы можете использовать аналитические функции для этого (я думаю, что новые версии Sybase также поддерживают это, но я недостаточно знаком с ним, чтобы подтвердить это, не говоря уже о том, чтобы сообщить вам, в какой версии он начал поддерживаться):

 SELECT  DateFrom,
        DateTo,
        Result = SUM(DATEDIFF(DAY, DateFrom, DateTo)   1) OVER(ORDER BY DateFrom)
FROM    T;
  

Однако, если вы используете более старые версии SQL Server и Sybase или все версии Access, вам придется использовать коррелированный подзапрос, что-то вроде:

 SELECT  DateFrom,
        DateTo,
        Result = (  SELECT  SUM(DATEDIFF(DAY, DateFrom, DateTo)   1)
                    FROM    T AS T2
                    WHERE   T2.DateFrom <= T.DateFrom
                )
FROM    T;