阿德放 回复 麦兜的兜(提问者)mysql 的 sql
WITH RECURSIVE CTE AS (
-- ...(与上面相同,但使用RankedTable代替my_table,并在JOIN中使用rn)
SELECT
rt.date,
rt.A,
rt.B,
rt.C,
rt.D,
rt.D AS PrevD,
rt.rn
FROM
(SELECT
*,
ROW_NUMBER() OVER (ORDER BY date) AS rn
FROM
test.sales) rt
WHERE
rt.rn = 1
UNION ALL
SELECT
rt.date,
rt.A,
rt.B,
COALESCE(rt.C, c.PrevD) AS C,
(c.PrevD + IFNULL(rt.A,0) - IFNULL( rt.B,0)) AS D,
(c.PrevD + IFNULL(rt.A,0) - IFNULL( rt.B,0)) AS PrevD,
rt.rn
FROM
( SELECT
*,
ROW_NUMBER() OVER (ORDER BY date) AS rn
FROM
test.sales ) rt
INNER JOIN CTE c ON rt.rn = c.rn + 1
WHERE
rt.rn > 1
)
SELECT
date,
A,
B,
C,
D
FROM
CTE
ORDER BY
date;