Данные за два года подряд - PullRequest
1 голос
/ 08 апреля 2020

Моя таблица выглядит следующим образом:

Period     Value
01.02.2019  100
01.02.2020  0
01.02.2020  1
01.02.2019  50
01.02.2019  50
01.03.2018  50

Теперь мне нужен один запрос, который суммирует значения за данный год и месяц и значения за прошлый год и данный месяц и разница обоих

При заданном входе Год = 2020, Месяц = ​​02

Ожидаемый результат:

Actual, PreviousYear, Diff
1       200           -199

Есть идеи, как это сделать?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Вы можете использовать условное агрегирование:

select
    sum(case when year(period) = 2020 then value end) actual,
    sum(case when year(period) = 2019 then value end) previous_year,
    sum(case when year(period) = 2020 then value else -value end) diff
from mytable
where year(period) in (2020, 2019) and month(period) = 2
0 голосов
/ 08 апреля 2020

Если в каждом месяце всегда есть хотя бы одна запись:

with months as (
   SELECT period, sum(Value) as Actual
   FROM [MyTable]
   GROUP BY period
)
select period, actual,
    LAG(actual, 12) OVER (ORDER BY period) As PreviousYear,
    actual - LAG(actual, 12) OVER (ORDER BY period) As Diff
FROM months
WHERE YEAR(period) = 2020 AND MONTH(period) = 2
ORDER BY period

Если это предположение не выполняется, нам потребуется дополнительная информация о возможных видах значений в столбце period.

...