SQL Server 2005中用于计算增长率的滞后函数的替代项
我怎样才能创建一个具有数据库增长率的列? 我有一个数据库,并创建了另一个表,其中只包含日期和计数字段,其中包含日期和记录总数。我还想插入另一列,列出我的增长百分比:SQL Server 2005中用于计算增长率的滞后函数的替代项,sql,sql-server,sql-server-2005,lag,window-functions,Sql,Sql Server,Sql Server 2005,Lag,Window Functions,我怎样才能创建一个具有数据库增长率的列? 我有一个数据库,并创建了另一个表,其中只包含日期和计数字段,其中包含日期和记录总数。我还想插入另一列,列出我的增长百分比: SELECT CONVERT(DATE, GETDATE()) AS Date, COUNT(*) AS Count FROM [Database] 我的桌子看起来像这样: Date Count Growth Rate 01/01/18 20.000,00 01/02/18 25.000,0
SELECT CONVERT(DATE, GETDATE()) AS Date, COUNT(*) AS Count
FROM [Database]
我的桌子看起来像这样:
Date Count Growth Rate
01/01/18 20.000,00
01/02/18 25.000,00 25,00%
01/03/18 40.000,00 60,00%
我使用SQLServer2005,因为这不能使用lag函数。我该怎么做呢?您可以使用相关子查询来模拟滞后函数,如下所示:
WITH cte (Date, Count) AS (
SELECT '2018-01-01', 20000.00 UNION
SELECT '2018-01-02', 25000.00 UNION
SELECT '2018-01-03', 40000.00
)
SELECT *, (
SELECT TOP 1 Count
FROM cte AS x
WHERE Date < t.Date
ORDER BY Date DESC
) AS PoorMansLag -- 100 * (Count / PoorMansLag - 1) gives you the result in OP
FROM cte AS t
另一种可能的办法:
CREATE TABLE #LagTable (
[Date] datetime,
[Count] numeric(10, 2)
)
INSERT INTO #LagTable VALUES ('2018-01-01', 20000.00)
INSERT INTO #LagTable VALUES ('2018-01-02', 25000.00)
INSERT INTO #LagTable VALUES ('2018-01-03', 40000.00);
WITH cte AS (
SELECT [Date], [Count], ROW_NUMBER() OVER (ORDER BY [Date]) AS RN
FROM #LagTable
)
SELECT
t1.[Date],
t1.[Count],
(t1.[Count] - COALESCE(t2.[Count], 0)) / t2.[Count] * 100 AS GrowthRate
FROM cte t1
LEFT JOIN cte t2 ON (t1.RN = t2.RN + 1)
输出:
Date Count GrowthRate
2018-01-01 00:00:00.000 20000.00 NULL
2018-02-01 00:00:00.000 25000.00 25.0000000000000
2018-03-01 00:00:00.000 40000.00 60.0000000000000
如果您查看MSDN页面,LAG直到2012年才成为一个函数:。之前的方法是使用一个行号,并在rowNum=rowNum-1上自连接到同一个表,您是否可以写入所需的输出?@steppup我想从“Count”列的最后一行计算到当前一行,将该数字转换为百分比,并将其放入“Growth Rate”列。如果计算是这样的:最后一行-当前行/最后一行,带有滞后函数,它看起来是这样的:100*计数-滞后计数,1/滞后计数*,1 | |“%”作为增长率