首页 > 解决方案 > Postgresql 在下一个使用第一行值

问题描述

你好我有这样的表:

  A | b | c |
--------------
 1  | 0 | 
 2  | 1 | 
 3  | 1 | 
 4  | 2 | 

我需要这样的结果:

 A | b | c |
--------------
 1  | 0 | 0     -   0 + 0     0 b value from first row   ,   0 - b value
 2  | 1 | 1     -   0 + 1     0 b value from first row   ,   1 - b value
 3  | 1 | 1     -   0 + 1     0 b value from first row   ,   1 - b value
 4  | 2 | 2     -   0 + 2     0 b value from first row   ,   2 - b value

C列是b + b的第一行。我现在关于 LAG 以获得预览值,但总是首先怎么样。如何获得如表所示的结果?

PostgreSQL 10

问候

标签: postgresql

解决方案


使用FIRST_VALUE()窗口函数:

SELECT A, b,
       b + FIRST_VALUE(b) OVER (ORDER BY A) c
FROM tablename

或者,如果您想更新表格:

UPDATE tablename  
SET c = b + (SELECT DISTINCT FIRST_VALUE(b) OVER (ORDER BY A) FROM tablename)

或者:

UPDATE tablename  
SET c = b + (SELECT b FROM tablename ORDER BY A LIMIT 1)

请参阅演示


推荐阅读