【发布时间】:2020-12-22 21:54:21
【问题描述】:
我是 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]
但正如我最近发现的那样,在将具有此逻辑的计算列添加到现有表时,我收到一条错误消息,提示窗口函数只能与 Select 或 Order By 一起使用。
我一直在到处寻找与 LAG 等效的方法,用于在表上创建计算列。
与此同时,我最终用这段代码创建了一个视图,但这并不是我真正想做的事情。
有人可以帮帮我吗?
问候,
【问题讨论】:
-
您只能使用用户定义的函数来执行此操作。更好的选择是使用视图。
-
在计算列中没有其他行需要考虑,因此允许窗口、聚合或分析函数没有意义。
LAG()在哪个结果集上? -
明白了,我继续看风景。