Альтернатива для функции LAG в SQL Server 2005 для расчета скорости роста - PullRequest
0 голосов
/ 27 ноября 2018

Как я могу создать столбец с темпом роста моей базы данных?У меня есть база данных и я создал еще одну таблицу (только с полем даты и количества), в которой у меня есть дата и общее количество записей.Я также хотел бы вставить еще один столбец с процентом моего роста:

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%

Я использую SQL Server 2005, потому что это не может использоватьфункция запаздывания.Как я мог это сделать?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Другой возможный подход:

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
0 голосов
/ 27 ноября 2018

Вы можете использовать коррелированный подзапрос для эмуляции функции 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
...