簡體   English   中英

PostgreSQL 計算多行之間的差異

[英]PostgreSQL calculate difference between multi rows

我嘗試使用查詢計算字段中行之間的差異:

插圖:輸入:年、月、名稱、大小輸出:增加

 year | month  | name    | Size  | increase
------+--------+------- -+-------+-----------
 2020 | 01     |  john   |10     | 0
 2020 | 01     |  peter  |12     | 0
 2020 | 01     |  kim    |16     | 0

 2020 | 02     |  john   |15     | 5  <- 15 - 10
 2020 | 02     |  peter  |16     | 4  <- 16 - 12
 2020 | 02     |  kim    |17     | 1  <- 17 - 16

 2020 | 03     |  john   |18     | 3  <- 18 - 16
 2020 | 03     |  peter  |19     | 3  <- 19 - 16
 2020 | 03     |  kim    |77     | 60 <- 77 - 17


         -------
 2020 | 12     |  john   |25     | 17
 2020 | 12     |  peter  |70     | 33
 2020 | 12     |  kim    |90     |42

通過相鄰“名稱”行之間的大小差異增加列作為輸出。

使用滯后()

select year, 
  month, 
  name, 
  size, 
  size - lag(size) over (partition by name order by year, month) as increase
from MyTable

如果您想要第一組行的0秒,則使用 3 參數形式的lag()

select year, month,  name, size, 
       (size - lag(size, 1, size)) over (partition by name order by year, month) as increase
from MyTable;

就個人而言,我更喜歡NULL所以我更喜歡 JohnHC 的答案。 但是,問題是明確要求那里的0值。

感謝 JohnHC 和 Gorden 的幫助。

當我在 psql 命令行上運行查詢時它起作用。 但是當我把它放到一個 php 腳本中時:

$result = pg_query($conn,"select year, month, name, (size - lag(size, 1, size)) over (partition by name order by year,month).as increase from testdb ");

我收到錯誤消息:

PHP 警告:pg_query():查詢失敗:錯誤:語法錯誤位於或接近'-lag(size)......'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM