Столбец SQL Shift вниз на 1 строку - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь вычесть значение из прошлого периода времени из значения в текущем периоде времени.

* Это то, что у меня есть:

Date,  present, past (identical to present)
 Jan,   100,        100
 Feb,   200,        200
March,  300,        300
April,  400,        400

* Это то, что я хочу;

Date,  present, past (past column shifted down 1 row)

     Jan,    100,       0
     Feb,   200,        100
    March,  300,        200
    April,  400,        300

Пример кода:

SELECT
      [month],
      sum([money]) as present,
      sum([money]) as past
FROM database
group by [month]

Ответы [ 2 ]

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

Вы можете использовать функцию LAG(), например:

select
  d,
  present,
  lag(past, 1, 0) over (order by d) as past  
from t
order by d

Результат:

d          present past
---------- ------- ----
2019-01-01 100        0
2019-02-01 200      100
2019-03-01 300      200
2019-04-01 400      300

См. SQL Fiddle .

Для записи вот скрипт данных:

create table t (
  d date,
  present int,
  past int
);

insert into t (d, present, past) values ('2019-01-01', 100, 100);
insert into t (d, present, past) values ('2019-02-01', 200, 200);
insert into t (d, present, past) values ('2019-03-01', 300, 300);
insert into t (d, present, past) values ('2019-04-01', 400, 400);
0 голосов
/ 01 ноября 2019

LAG() с ORDER BY (константа 1 для естественного порядка)

DECLARE @T TABLE(date NVARCHAR(20), present int, past int)
INSERT @T values('Jan',100,100),('Feb',200,200),('March',300,300),('April',400,400)

SELECT 
    date,
    present,
    LAG(present) OVER(ORDER BY (SELECT 1))
FROM 
    @T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...