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 个值中的 n 为 a+1
。 a
是元组中列 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)