当我运行下面的代码时,我收到此错误:
消息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');
答案 0 :(得分:2)
LAG(someDate,1,0)
表示:返回列someDate
的前一个值,如果没有“previous”列(因为它是第一行),则返回值0
。
如果 可能,那么第一行的列中将有一个整数值,所有其他行的日期值都是。一列的所有值必须具有相同的数据类型,因此SQL Server抱怨说“ int与日期不兼容”
您需要使用日期作为默认值(第三个参数)。您显然不需要任何值,因此只需使用lag(someDate)
,它将为第一行返回NULL
。