SQL 将列向下移动 1 行

Cli*_*ehl 1 sql t-sql sql-server

我试图用当前时间段的值减去过去时间段的值。

*这就是我所拥有的:

Date,  present, past (identical to present)
 Jan,   100,        100
 Feb,   200,        200
March,  300,        300
April,  400,        400
Run Code Online (Sandbox Code Playgroud)

*这就是我要的;

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

     Jan,    100,       0
     Feb,   200,        100
    March,  300,        200
    April,  400,        300
Run Code Online (Sandbox Code Playgroud)

代码示例:

SELECT
      [month],
      sum([money]) as present,
      sum([money]) as past
FROM database
group by [month]
Run Code Online (Sandbox Code Playgroud)

The*_*ler 11

您可以使用该LAG()函数,如下所示:

select
  d,
  present,
  lag(past, 1, 0) over (order by d) as past  
from t
order by d
Run Code Online (Sandbox Code Playgroud)

结果:

d          present past
---------- ------- ----
2019-01-01 100        0
2019-02-01 200      100
2019-03-01 300      200
2019-04-01 400      300
Run Code Online (Sandbox Code Playgroud)

请参阅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);
Run Code Online (Sandbox Code Playgroud)