【发布时间】:2016-02-19 16:57:38
【问题描述】:
我正在尝试在 T-SQL 中使用 LAG 来计算一些滞后特性。当LAG reference page 说这个函数是不确定的时,我有点担心。 reference page on function determinism 表示“在查询中指定 ORDER BY 子句不会改变在该查询中使用的函数的确定性”。但是,我不明白为什么 LAG 在相同条件下会返回不同的结果。如果是这样,人们为什么要使用它?也许我没有正确解释“决定论”?谢谢!
【问题讨论】:
-
LAG provides access to a row at a given physical offset that comes before the current row可能是因为物理顺序可以从查询的一次执行更改为下一次执行,例如由于 INSERT 或 DELETE? -
如果
AVG被认为是确定性的,那么LAG也应该是只要partition by和order by中使用的列集是唯一的。那么就没有歧义了,对于给定的输入集,它总是会返回相同的结果。 -
其实没有。 AVG 不会因索引重组而改变 - LAT 会。
-
@TomTom - 只要 partition by 和 order by 中使用的列集是唯一的,索引重组就无关紧要。
SUM和AVG当然可以根据顺序更改它们在此处显示的值blogs.msdn.com/b/khen1234/archive/2005/05/13/417153.aspx
标签: sql-server tsql lag non-deterministic