我对SQL还很陌生,我正试图在表中创建一个计算列,用于计算当前行和前一行之间的列的DateDiff。
现在一切都很好,并使用Select进行查询以显示此值:
SELECT *,
Case When INCM<> lag(INCM) over(ORDER BY INCM ASC, Submit_Date ASC) Then 0 else DateDiff(mi,Submit_Date, lag(Submit_Date) over (ORDER BY INCM ASC, Submit_Date ASC)) End As Diff
FROM [OP].[Ticket_Work_Info]
但正如我最近发现的那样,当将具有此逻辑的计算列添加到现有表中时,我会收到一个错误,即Windowed Functions只能与Select或Order By一起使用。
我一直在到处寻找一个等效于LAG的方法,用来在表上创建计算列。
与此同时,我最终用这段代码创建了一个视图,但这并不是我今后真正想做的。
有人能帮我一把吗?
问候,
以下是关于为什么计算列只能引用当前行中的值(以及确定性函数和常量(的一些推理。考虑一个定义,例如:
create t (
t_id int,
a varchar(255),
x int,
prev_x as (lag(x) over (order by t_id)
);
以及一些样本数据:
id y x
1 z 6
2 abc 28
3 z 496
这看起来不错。但是,考虑一下这个问题:
select t.*
from t
where a <> 'abc';
第三行的x_prev
的值应该是28还是6?
我想没有人想就此做出决定。相反,我们的想法是,行定义良好,因此过滤条件不会影响行中的值。