SQL 等同于 LAG() 创建计算 table
SQL Equivalent to LAG() to create a computed table
我是 SQL 的新手,我正在尝试在 table 中创建一个计算列,用于计算当前行和上一行之间列的 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]
但正如我最近发现的那样,在将具有此逻辑的计算列添加到现有 table 时,我收到一条错误消息,提示 Windowed Functions can only be used with Select or Order By.
我一直在到处寻找与 LAG 等效的东西,用于在 table 上创建计算列。
与此同时,我最终使用这段代码创建了一个视图,但这并不是我接下来真正想要做的。
有人可以帮我吗?
此致,
以下是关于为什么 计算列只能引用当前行中的值(以及确定性函数和常量)的一些推理。考虑如下定义:
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?
我想没有人想就此做出决定。相反,想法是 行 是 well-defined,因此过滤条件不会影响行内的值。
我是 SQL 的新手,我正在尝试在 table 中创建一个计算列,用于计算当前行和上一行之间列的 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]
但正如我最近发现的那样,在将具有此逻辑的计算列添加到现有 table 时,我收到一条错误消息,提示 Windowed Functions can only be used with Select or Order By.
我一直在到处寻找与 LAG 等效的东西,用于在 table 上创建计算列。
与此同时,我最终使用这段代码创建了一个视图,但这并不是我接下来真正想要做的。
有人可以帮我吗?
此致,
以下是关于为什么 计算列只能引用当前行中的值(以及确定性函数和常量)的一些推理。考虑如下定义:
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?
我想没有人想就此做出决定。相反,想法是 行 是 well-defined,因此过滤条件不会影响行内的值。