我正在使用 PostgreSQL,并且我有一个 table
包含以下列:id
, distance
,和length
。我想通过 distance
订购 table 并创建一个名为 cum_length
的新列使用窗口函数。我还想过滤行,以便仅显示 cum_length
之前的行。超过一定阈值的值包含在最终结果中。
输入示例table
:
阈值 6
的所需输出:
这是我想出的 SQL:
WITH ordered_table AS (
SELECT id,
distance,
length,
SUM(length) OVER (ORDER BY distance) AS cum_length
FROM table)
SELECT *
FROM ordered_table
WHERE cum_length <= 6
但这忽略了所需结果的最后一行。
最佳答案
尝试以下操作:
WITH ordered_table AS
(
SELECT id, distance, length,
SUM(length) OVER (ORDER BY distance) AS cum_length
FROM table_name
)
SELECT id, distance, length, cum_length
FROM ordered_table
WHERE cum_length <= COALESCE((SELECT MIN(cum_length) FROM ordered_table WHERE cum_length > 6), 6)
对于您的示例数据,这相当于 WHERE cum_length <= 7
.
关于sql - 如何过滤有序表,直到达到阈值的第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75057609/