TimescaleDB API 参考超函数最小值和最大值

简介

从列中获取 N 个最大值。

max_n() 函数给出与常规 SQL 查询 SELECT ... ORDER BY ... LIMIT n 相同的结果。但与 SQL 查询不同,它们可以像其他聚合超函数一样进行组合和合并。

要获取 N 个最小值,请使用 min_n()。要获取带有随附数据的 N 个最大值,请使用 max_n_by()

相关超函数组

聚合

max_n
查找数据集中的最大值

访问器

into_array
从 MaxN 聚合返回最高值的数组
into_values
从 MaxN 聚合返回最高值

汇总

rollup
合并多个 MaxN 聚合
max_n(
value BIGINT | DOUBLE PRECISION | TIMESTAMPTZ,
capacity BIGINT
) MaxN

构造一个聚合,它将跟踪传递给它的最大值。

必需参数
名称类型描述
valueBIGINT, DOUBLE PRECISION, TIMESTAMPTZ传递到聚合中的值
capacityBIGINT要保留的值的数量。
返回值
类型描述
max_nMaxN编译后的聚合。请注意,确切的类型将是 MaxIntsMaxFloatsMaxTimes,具体取决于输入类型
into_array (
agg MaxN
) BIGINT[] | DOUBLE PRECISION[] | TIMESTAMPTZ[]

返回聚合看到的 N 个最大值。这些值格式化为降序排列的数组。

必需参数
名称类型描述
aggMaxN要从中返回结果的聚合。请注意,此处的确切类型根据聚合中存储的数据类型而有所不同。
返回值
类型描述
into_arrayBIGINT[], DOUBLE PRECISION[], TIMESTAMPTZ[]创建此聚合时看到的最高值。
示例

查找 i = 1 到 10000 的 i * 13 % 10007 的前 5 个值

SELECT into_array(
max_n(sub.val, 5))
FROM (
SELECT (i * 13) % 10007 AS val
FROM generate_series(1,10000) as i
) sub;
into_array
---------------------------------
{10006,10005,10004,10003,10002}
into_values (
agg MaxN
) SETOF BIGINT | SETOF DOUBLE PRECISION | SETOF TIMESTAMPTZ

返回聚合看到的 N 个最大值。

必需参数
名称类型描述
aggMaxN要从中返回结果的聚合。请注意,此处的确切类型根据存储的数据类型而有所不同。
返回值
类型描述
into_valuesSETOF BIGINT, SETOF DOUBLE PRECISION, SETOF TIMESTAMPTZ创建此聚合时看到的最高值。
示例

查找 i = 1 到 10000 的 i * 13 % 10007 的前 5 个值

SELECT into_values(
max_n(sub.val, 5))
FROM (
SELECT (i * 13) % 10007 AS val
FROM generate_series(1,10000) as i
) sub;
into_values
-------------
10006
10005
10004
10003
10002
rollup(
agg MaxN
) MaxN

此聚合合并由其他 max_n 聚合生成的聚合。与访问器结合使用,它返回在所有聚合数据中找到的最大值。

必需参数
名称类型描述
aggMaxN正在合并的聚合
返回值
类型描述
rollupMaxN所有贡献值的聚合。

此示例假定您有一个股票交易表,格式如下

CREATE TABLE stock_sales(
ts TIMESTAMPTZ,
symbol TEXT,
price FLOAT,
volume INT
);

您可以查询每天 10 笔最大的交易

WITH t as (
SELECT
time_bucket('1 day'::interval, ts) as day,
max_n(price * volume, 10) AS daily_max
FROM stock_sales
GROUP BY time_bucket('1 day'::interval, ts)
)
SELECT
day, as_array(daily_max)
FROM t;

关键词

在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页