NTH_VALUE [analytic]

在窗口的第 n 行(从第 1 行开始计数)上求值并返回求值结果。如果指定的行不存在,NTH_VALUE 将返回 NULL

行为类型

不可变

语法

NTH_VALUE ( expression, row‑number [ IGNORE NULLS ] ) OVER (
    [ window-frame-clause ]
    [ window-order-clause ]
    [ window-frame-clause ] )

参数

表达式
计算表达式。该表达式可以是常量、列名称、非解析函数、函数表达式或包含任意各项的表达式。
row‑number
指定要计算的行,其中 row‑number 计算结果为 ≥ 1 的整数。
IGNORE NULLS
指定返回集中第一个非NULL 值,如果所有值均为 NULL,则返回 NULL
OVER()
请参阅分析函数

示例

在以下示例中,对于表 t1 中的每个元组(当前行),窗口框架子句将窗口定义如下:

ORDER BY b ROWS BETWEEN 3 PRECEDING AND CURRENT ROW

对于每个窗口,第 n 个值中的 na+1a 是元组中列 a 的值。

NTH_VALUE 返回表达式 b+1 的结果,其中 b 是第 n 行(即窗口中的 a+1 行)中列 b 的值。

=> SELECT * FROM t1 ORDER BY a;
 a | b
---+----
 1 | 10
 2 | 20
 2 | 21
 3 | 30
 4 | 40
 5 | 50
 6 | 60
(7 rows)

=> SELECT NTH_VALUE(b+1, a+1) OVER
     (ORDER BY b ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) FROM t1;
 ?column?
----------


       22
       31



(7 rows)