Использовать последнее значение с операциями на SQL сервере - PullRequest
1 голос
/ 19 февраля 2020

Предположим, у меня есть таблица в SQL Сервер с именем Budget_Spend, подобный этому Original table

Я знаю, с правильной группировкой по сумме и порядком по достижению следующей таблицы ( это довольно очевидно) objective table

Однако я не знаю, как реплицировать столбец "Aviable", построенный по логике c:

  • За первый месяц это бюджет - потратить - налоги
  • Для следующих месяцев рассчитывается как ПРЕДЫДУЩАЯ (Доступная) -CURRENT (Потратить) -CURRENT (Налоги)

У меня есть попытался использовать функцию LAG без успеха (большинство моих попыток не выполнялось из-за синтаксических проблем).

Есть идеи сделать? Я полагаю, что мне нужно LAG и, возможно, CASE, чтобы получить первое значение.

Это DDL для создания таблицы

/* CREATE TABLE */
CREATE TABLE Budget_Spend(
Month DOUBLE,
Budget DOUBLE,
Spend DOUBLE,
Taxes DOUBLE);

/* INSERT */
INSERT INTO Budget_Spend(Month, Budget, Spend, Taxes) VALUES
(1, 1000, 75, 11.25);


INSERT INTO Budget_Spend(Month, Budget, Spend, Taxes) VALUES
(1, 1000, 25, 3.75);

INSERT INTO Budget_Spend(Month, Budget, Spend, Taxes) VALUES
(2, 1000, 200, 30);

INSERT INTO Budget_Spend(Month, Budget, Spend, Taxes) VALUES
(3, 1000, 150, 22.5);

INSERT INTO Budget_Spend(Month, Budget, Spend, Taxes) VALUES
(4, 1000, 10, 1.5);

INSERT INTO Budget_Spend(Month, Budget, Spend, Taxes) VALUES
(4, 1000, 10, 1.5);

1 Ответ

1 голос
/ 19 февраля 2020

Вам нужна оконная функция:

select bs.*, 
      Budget - sum(Spend + Taxes) over (order by month) as Available 
from (select month, Budget, sum(Spend) as Spend, sum(Taxes) as Taxes
      from Budget_Spend bs
      group by month, Budget
     ) bs;
...