SQL等效于LAG()来创建计算表



我对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?

我想没有人想就此做出决定。相反,我们的想法是,定义良好,因此过滤条件不会影响行中的值。

最新更新