生成日期范围并对每个SQL记录应用计算
我有以下案例excel格式: 所以如果我改变上面的参数,记录就会改变。例如,结果如下: 有人知道如何在SQL脚本中实现这一点吗?生成日期范围并对每个SQL记录应用计算,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我有以下案例excel格式: 所以如果我改变上面的参数,记录就会改变。例如,结果如下: 有人知道如何在SQL脚本中实现这一点吗? 谢谢。您可以使用CTE解决此问题 DECLARE @StartDate DATE = '2016-01-01' ,@EndDate DATE = '2016-12-31' ,@MaxValue float = 96 ,@PointValue float = 0.0972 ;WITH ctetest AS (
谢谢。您可以使用CTE解决此问题
DECLARE @StartDate DATE = '2016-01-01'
,@EndDate DATE = '2016-12-31'
,@MaxValue float = 96
,@PointValue float = 0.0972
;WITH ctetest AS (
SELECT @StartDate AS CDate,@MaxValue AS Value
UNION ALL
SELECT dateadd(day,1,CDate) ,(1-@PointValue) * Value
FROM ctetest
WHERE dateadd(day,1,CDate)<=@EndDate
)
SELECT * FROM ctetest OPTION (MAXRECURSION 0)
注意:-请检查foluma,并在需要时进行更改。Msg 530,16级,状态1,第5行语句终止。在语句完成之前,最大递归100已用尽。您必须将选项MAXRECURSION 400添加到cte,因为它将运行超过默认递归100的时间。修改了查询,添加了MAXRECURSION。此外,您还可以根据需要修改MaxValue和PointValue的数据类型。可能重复的
Date Value
-----------------------------
2016-01-01 96 --> This value is taken from MaxValue Parameter
2016-01-02 95.9 --> It requires a formula, which is (1 - PointValue) * Previous Value
2016-01-03 95.8
ff.
2016-12-31 67.3 --> Last Record, Based on Date Finish. The formula is the same
DECLARE @StartDate DATE = '2016-01-01'
,@EndDate DATE = '2016-12-31'
,@MaxValue float = 96
,@PointValue float = 0.0972
;WITH ctetest AS (
SELECT @StartDate AS CDate,@MaxValue AS Value
UNION ALL
SELECT dateadd(day,1,CDate) ,(1-@PointValue) * Value
FROM ctetest
WHERE dateadd(day,1,CDate)<=@EndDate
)
SELECT * FROM ctetest OPTION (MAXRECURSION 0)