按前一行结果递增行值

时间:2014-07-01 12:41:33

标签: sql sql-server 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 个答案:

答案 0 :(得分:0)

因为你有一个以前的如果你正在使用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;