提取上一行计算值以用于当前行计算 - sql

问题描述 投票:0回答:1

我有一个下表,其中第

result

列中包含预期输出
id  col1   col2   col3  result
1   10     30     2     30
2   15     10     8     28
3   25     10     5     25
4   20     25     9     25
5   30     15     4     30

result
=
max(col1, col2, (previous_row's) result - (previous row's) col3)

例如:对于第一行,其为

max(10, 30)=30
,对于第二行,其为
max(15,10,30-2)=28

可以使用

sql
partition
中有效地完成此操作吗? 我已经找到了完成这部分的方法:
((previous_row's) result - (previous row's) col3)
,但由于涉及
max
函数使用前一行的值作为输入的复杂性而卡住了。

更新: 我使用下面的sql来获取

((previous_row's) result - (previous row's) col3)

FIRST_VALUE(max(col1, col2)) over (order by id)
            -IFNULL(sum(col3) over (order by id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING),0)) 
sql google-bigquery common-table-expression
1个回答
0
投票

考虑以下方法

WITH RECURSIVE result_cte AS (
  SELECT *,
    GREATEST(col1, col2) AS result
  FROM your_table
  WHERE id = 1
  UNION ALL
  SELECT t.*,
    GREATEST(t.col1, t.col2, r.result - r.col3) AS result
  FROM your_table t
  JOIN result_cte r
  ON t.id = r.id + 1
)
SELECT *
FROM result_cte
ORDER BY id    

如果应用于问题中的样本 dara,输出为

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.