Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL窗口函数:如何引用当前行中的列与框架行中的列?_Postgresql_Aggregate - Fatal编程技术网

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