我認爲這是你真正需要的:
表看起來應該是李柯本:
CREATE TABLE release (
release_id integer PRIMARY KEY, -- pk is NOT NULL automatically
-- state varchar(2)[] NOT NULL, -- ??
amount numeric NOT NULL
);
測試數據:
INSERT INTO release VALUES (release_id, amount)
(1121, 25)
,(1122, 30)
,(1123, 90)
,(1124, 10);
查詢:
WITH x AS (
SELECT *
,lag(amount) OVER (ORDER BY release_id) as last_amount
FROM release
)
SELECT release_id, amount
,(amount - last_amount) AS abs_change
,round((100 * (amount - last_amount))/last_amount, 2) AS percent_change
FROM x
ORDER BY 1;
CTE (With clause)和窗口功能lag()
需要的PostgreSQL 8.4或更高版本。
結果:
release_id | amount | abs_change | percent_change
-----------+--------+------------+---------------
1121 | 25 | <NULL> | <NULL>
1122 | 30 | 5 | 20.00
1123 | 90 | 60 | 200.00
1124 | 10 | -80 | -88.89
1121,1122 - 那些是字段名稱或值?請在這裏發佈完整的表格定義。並告訴我們你到目前爲止做了什麼。 – vyegorov
似乎應該有一個釋放表,每個版本有*一個*金額,以及一個計算所有/選定版本之間變化的視圖/函數。 **不** **表之間的增量之間的版本。此外,請提及您的Postgres版本和計算的預期目的(以更好地瞭解您需要的內容)。 –