Сумма чисел с предыдущего месяца по месяц до года в SQL - PullRequest
0 голосов
/ 28 ноября 2018

Будучи новичком, мне трудно кодировать этот конкретный сценарий в SQL Server 2008

enter image description here

Как вы можете видеть, SUMстолбец за июль 2017 года, например, равен следующему: август-декабрь 2016 года + январь-июль 2017 года = 4625

Аналогично столбец СУММА за август 2017 года равен: сентябрь-декабрь 2016 года + январь-январьАвгуст 2017 года = 4625

enter image description here

Как я могу автоматизировать это из месяца в месяц?

Я ценю любую помощь, которую могу получить.Попытка закодировать это в SQL Server 2008

Ответы [ 2 ]

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

Звучит так, будто вы хотите оконные функции.Предполагая, что ваши данные уже суммированы по месяцам:

select t.*,
       sum(numbers) over (order by yyyymm rows between 11 preceding and current row) as prev_12_sum
from t;

Если данные еще не суммированы, вы также можете поместить их в group by:

select year(date), month(date),
       sum(sum(numbers)) over (order by year(date), month(date) rows between 11 preceding and current row) as prev_12_sum
from t
group by year(date), month(date)
order by min(date);
0 голосов
/ 28 ноября 2018

Используя эту методологию, чтобы найти первый день текущего месяца:

select dateadd(month, datediff(month, 0, getdate()), 0)

Мы можем расширить его, чтобы получить первый день следующего месяца, год назад ... т.е. 11 месяцевназад.

select dateadd(month, datediff(month, 0, dateadd(month,-11,getdate())), 0)

Тогда нам просто нужно использовать его в предложении where для ограничения ваших данных ...

declare @startDate = (select dateadd(month, datediff(month, 0, dateadd(month,-11,getdate())), 0))
declare @endDate = getdate()

select sum(someColumn)
from someTable
where dateColumn between @startDate and @endDate

Поскольку вы не предоставили свой фактический набор данных,просто некоторые сводные данные, я не уверен в именах ваших столбцов и таблиц

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