Как рассчитать значение YTD (Year To Date) в таблице Oracle - PullRequest
0 голосов
/ 09 января 2019

Существует таблица, и ее данные выглядят так:

year month v1 v2    
2017 1     2  3
2017 2     4  5
...  ..   ..  ..
2017 12    9  3    
2018 1     1  3
2018 2     6  2
...  ..   ..  ..
2018 12    2  2    

таблица имеет год, месяц, v1, v2, всего 4 поля, теперь я хочу, чтобы SQL вычислял значение YTD для каждой строки, результат запроса выглядит следующим образом:

year month v1 v2   v1_YTD    v2_YTD
2017 1     2  3    2         3
2017 2     4  5    6         8
...  ..   ..  ..   ..        ..
2017 12    9  3    m1        n1    

2018 1     1  3    1         3
2018 2     6  2    7         5
...  ..   ..  ..   ..        ..
2018 12    2  2    m2        n2    

Значение YTD, например, рассчитывается для февраля, затем значение YTD = январь + февраль, если месяц декабрь, значением YTD должно быть значение для января + февраль + март + ... + декабрь.

Значение YTD не должно пересекать год.

Есть ли SQL, способный достичь этой цели?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Вы можете использовать аналитическую функцию SUM () OVER ()

SELECT year, month, v1, v2,
    SUM(v1) OVER (PARTITION BY year ORDER BY month) AS v1_ytd,
    SUM(v2) OVER (PARTITION BY year ORDER BY month) AS v2_ytd
FROM table_name
ORDER BY year, month;
0 голосов
/ 09 января 2019

Не уверен, что он будет работать в Oracle 10g и более ранних версиях. Попробуйте добавить это поле:
SUM(v1) OVER (PARTITION BY year ORDER BY month)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...