[英]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.