Промежуточный итог в SQL, включая итоги прошлого года - PullRequest
0 голосов
/ 06 ноября 2019

Требуется запрос, чтобы выбрать «Промежуточный итог», как указано на изображении.
Итоговое значение за 2017 год плюс каждые новые месячные цифры должны прибавляться к предыдущему итогу.

https://i.stack.imgur.com/DL7p0.png «Пример«

Ответы [ 3 ]

1 голос
/ 06 ноября 2019

Этот следующий скрипт будет работать для MSSQL, и вы можете использовать ту же логику для других баз данных -

WITH your_table(year,month,partersgrowth)
AS
(
    SELECT '2019','jan', 100 UNION ALL
    SELECT '2019','feb', 300 UNION ALL
    SELECT '2019','mar', 400 UNION ALL
    SELECT '2019','apr', 500 UNION ALL
    SELECT '2018','Dec', 200
)

SELECT A.year,A.month,A.partersgrowth,
(
    SELECT SUM(B.partersgrowth) 
    FROM your_table B 
    WHERE CAST(B.Year +'-'+B.month+'-01' AS DATE) 
        <= CAST(A.Year +'-'+A.month+'-01' AS DATE)
) Running_Total
FROM your_table A
ORDER BY CAST(A.Year +'-'+A.month+'-01' AS DATE)
0 голосов
/ 06 ноября 2019

с использованием решения @mkRabbani .. вы можете упростить его следующим образом:

;WITH your_table(year,month,partersgrowth)
AS
(
    SELECT '2019','jan', 100 UNION ALL
    SELECT '2019','feb', 300 UNION ALL
    SELECT '2019','mar', 400 UNION ALL
    SELECT '2019','apr', 500 UNION ALL
    SELECT '2018','Dec', 200
)

select *, sum(partersgrowth) over ( order by  [year],[month]) as running_total 
from your_table

РЕДАКТИРОВАТЬ: Как указано в комментарии ниже .. вы хотите упорядочить по надлежащей дате в сумме (я быиспользовать порядок по году, а затем номер месяца, а не название месяца)

0 голосов
/ 06 ноября 2019

Если вы используете MSSQL, вы можете запустить следующий код

with cte as (
select t.*, lag(partersGrowth) over(partition by year order by month asc rows ROWS UNBOUNDED PRECEDING) prevTotal
from Table )
select years, month, partersGrowth, prevTotal || '+' partersGrowth as "Need Running Total"
from cte
...