如何使用ORDERING BY DATE获取上一行值?

时间:2016-01-16 23:00:19

标签: sql-server

当我运行下面的代码时,我收到此错误:

  

消息206,级别16,状态2,行14操作数类型冲突:int是   与日期不兼容

下面是我的代码,我在上面得到了上面的错误:

declare @tbl table (
cat1 nvarchar(500),
cat2 nvarchar(500),
someDate date
);

insert into @tbl values
('A','B','2016-01-01'),
('A','B','2016-01-02'),
('A','B','2016-01-03'),
('A','B','2016-01-04'),
('A','B','2016-01-05');

select 
cat1,
cat2,
someDate,
LAG(someDate,1,0) OVER (PARTITION BY cat1, cat2 ORDER BY someDate asc) as PreviousSomeDate
from @tbl;

此处低于预期结果([someDate]的前一行值):

('A','B','2016-01-01',''),
('A','B','2016-01-02','2016-01-01'),
('A','B','2016-01-03','2016-01-02'),
('A','B','2016-01-04','2016-01-03'),
('A','B','2016-01-05','2016-01-04');

1 个答案:

答案 0 :(得分:2)

LAG(someDate,1,0)表示:返回列someDate的前一个值,如果没有“previous”列(因为它是第一行),则返回值0

如果 可能,那么第一行的列中将有一个整数值,所有其他行的日期值都是。一列的所有值必须具有相同的数据类型,因此SQL Server抱怨说“ int与日期不兼容

您需要使用日期作为默认值(第三个参数)。您显然不需要任何值,因此只需使用lag(someDate),它将为第一行返回NULL