PostgreSQL窗口函数:如何引用当前行中的列与框架行中的列?
[] 我有以下数据,按PostgreSQL窗口函数:如何引用当前行中的列与框架行中的列?,postgresql,aggregate,Postgresql,Aggregate,[] 我有以下数据,按组,每行有一个递增的索引,并包含一个限制和一个值: CREATE TABLE items ("group" VARCHAR, index INTEGER, "limit" INTEGER, value INTEGER) ; INSERT INTO items ("group", index, "limit", value) VALUES ('A', 1, 2, 1), ('A', 2, NULL, 3), ('B', 1, 3, 2), ('B', 2, NU
组
,每行有一个递增的索引
,并包含一个限制
和一个值
:
CREATE TABLE items ("group" VARCHAR, index INTEGER, "limit" INTEGER, value INTEGER) ;
INSERT INTO items ("group", index, "limit", value) VALUES
('A', 1, 2, 1), ('A', 2, NULL, 3),
('B', 1, 3, 2), ('B', 2, NULL, 2), ('B', 3, 1, 3), ('B', 4, 2, 5),
('C', 1, 2, 3), ('C', 2, 2, 3), ('C', 3, NULL, 4), ('C', 4, 5, 5) ;
对于每一行,我想知道同一组的下一个索引
,其值
明显高于当前行的限制
,即:
group | index | limit | value | next
-------+-------+-------+-------+------
A | 1 | 2 | 1 | 2
A | 2 | | 3 |
B | 1 | 3 | 2 | 4
B | 2 | | 2 |
B | 3 | 1 | 3 | 4
B | 4 | 2 | 5 |
C | 1 | 2 | 3 | 4
C | 2 | 2 | 1 | 4
C | 3 | | 1 |
C | 4 | 5 | 5 |
问题:如何使用窗口功能实现这一点?我考虑了下面的查询,但我不知道如何在我的案例中指定limit
指的是当前行,而value
指的是帧行:
SELECT *,
MIN(CASE WHEN value < "limit" THEN index ELSE NULL END)
OVER (PARTITION by "group" ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS next
FROM items
选择*,
最小值(如果值<“限制”,则索引为空)
覆盖(按“组”行划分1个后续和无界后续)作为下一个
从项目
提前感谢您的帮助 沿着这些路线。因此,答案似乎是当前行值不能被引用。沿着这些路线。因此,答案似乎是当前行值不能被引用。
SELECT *,
MIN(CASE WHEN value < "limit" THEN index ELSE NULL END)
OVER (PARTITION by "group" ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS next
FROM items