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)?