为什么T-SQL中的LAG功能是非确定性的?

hlu*_*hlu 4 t-sql sql-server lag non-deterministic

我正在尝试在T-SQL中使用LAG来计算一些滞后功能.当LAG参考页面说这个函数是非确定性的时候,我有点担心.关于函数确定性参考页面说"在查询中指定ORDER BY子句不会改变在该查询中使用的函数的确定性".但是,我不明白为什么LAG会在相同条件下返回不同的结果.如果是这样,为什么人们会使用它?也许我不是正确地解释"决定论"?谢谢!

Ale*_*lex 7

按照MSDN 文档,非确定性函数中的每一个,他们被称为用一组特定的输入值,即使他们访问数据库状态保持在同一时间返回不同的结果,所以这是不相关的数据发生变化(INSERT,DELETE,UPDATE).

但是,Eric对物理排序顺序是正确的.物理排序顺序可能因查询而异,例如,当数据中存在重复行时.在该场景中LAG,LEAD可以根据所选的执行计划返回不同的结果.另一方面,该AVG函数是确定性的,因为无论排序顺序如何,它总是会返回相同数据集的相同结果.


saa*_*rrr 2

在数学和物理学中,确定性系统是指系统未来状态的发展不涉及随机性的系统。因此,确定性模型将始终从给定的起始条件或初始状态产生相同的输出。 https://en.wikipedia.org/wiki/Deterministic_system

LAG 函数本身不是确定性的,因为它的结果可能会根据数据状态而变化,Eric 是正确的。在某些数据模型中,如果正确应用,它可以是确定性的(就像您在滞后中按数字键排序),但函数定义本身并不是确定性的。

合理?