SQL 窗口函数 - NTH_VALUE - 如果我们对前 n-1 行使用 Order by,为什么会返回 NULL

use*_*954 2 mysql window-functions

在此输入图像描述

所以,我说的是 SQL 中的 NTH_VALUE(column,n)

现在我观察到,如果我使用 order by 子句并指定与 nth_value 内部相同的列,则所选列中的前 n-1 行始终为 NULL。这是为什么?如果我想选择第三列,并且第三列存在,那么无论我是否使用 order by(同一列)子句,它都应该返回行号 1 和行号 2 的第三列?另外,有什么办法可以解决它吗?

小智 5

发生这种情况是因为 sql 使用的默认框架子句的范围介于无界的前一行和当前行之间。这意味着它只会考虑当前行之前的行来获取第 n 个值。因此,对于直到 N-1 的行,您将得到 NULL,因为第 N 个值超出了这 N-1 行。

解决方案:

如果将其更改为 over() 内无界前导和无界后继之间的范围,则使用第 N 个值窗口函数将不会获得 NULL 值。