Alter Table 中的 LAG 函数产生窗口函数错误

Posted

技术标签:

【中文标题】Alter Table 中的 LAG 函数产生窗口函数错误【英文标题】:LAG function in Alter Table produces windowed function error 【发布时间】:2015-12-05 16:27:39 【问题描述】:

以下代码可以正常工作 选择 date_trans,time_trans,price, price - lag(price,1,0) over(order by date_tans ASC, time_trans ASC) As pChng 来自 dbo.A_1

但是,如果我尝试更改表格并添加具有类似代码的列,则会出现错误。对我来说,窗口函数在 order by 子句中,所以我不明白为什么会出错

Alter table dbo.A_1 Add pChng as price - lag(price,1,0) over(order by date_trans ASC, time_trans ASC)

【问题讨论】:

抱歉,您不能在计算列中使用窗口函数。这是 MSDN 页面,详细说明了您可以做什么和不能做什么。 technet.microsoft.com/en-us/library/ms191250(v=sql.105).aspx 【参考方案1】:

您不能将其添加为计算列。

你也可以

添加一个标量 UDF,它接受 date_trans 和 time_trans 的参数,然后返回前一行的价格并在计算列中引用该价格。 或者只是使用您的lag 列创建一个视图。 或使用触发器自己维护pChng 列。

这三个选项在效率和实现复杂性之间进行了各种权衡。例如,如果对整个表进行查询,第一个可能会比第二个效率低得多。

【讨论】:

以上是关于Alter Table 中的 LAG 函数产生窗口函数错误的主要内容,如果未能解决你的问题,请参考以下文章

在 MonetDB 中最快实现lead() 或 lag() 窗口函数

pyspark 是不是支持窗口函数(例如 first、last、lag、lead)?

带有“lag()”窗口函数的 PostgreSQL 更新查询

如何为不同的观察组使用 LAG 和 LEAD 窗口函数

带有 where 子句的窗口函数(LEAD/LAG)?

窗口函数 LAG 可以引用正在计算哪个值的列吗?