使用分区依据从 Snowflake (SQL) 中特定列的最后一个非空值查找相邻列值
Finding adjacent column values from the last non-null value of a certain column in Snowflake (SQL) using partition by
假设我有以下 table:
ID
T
R
1
2
1
3
Y
1
4
1
5
1
6
Y
1
7
我想添加一个列,该列等于基于列 R 的最后一个非空值的列 T 的值。这意味着:
ID
T
R
GOAL
1
2
1
3
Y
1
4
Y
3
1
5
4
1
6
Y
4
1
7
6
我确实有很多 ID,所以我需要使用 OVER (PARTITION BY ...)
子句。另外,如果可能的话,我想使用一条语句,比如
SELECT *
, GOAL
FROM TABLE
所以没有任何额外的 select 语句。
T
是升序排列的,所以按照R
取null,往后看取最大值。
select *,
max(case when R is not null then T end)
over (
partition by id
order by T
rows between unbounded preceding and 1 preceding
) as GOAL
from TBL
假设我有以下 table:
ID | T | R |
---|---|---|
1 | 2 | |
1 | 3 | Y |
1 | 4 | |
1 | 5 | |
1 | 6 | Y |
1 | 7 |
我想添加一个列,该列等于基于列 R 的最后一个非空值的列 T 的值。这意味着:
ID | T | R | GOAL |
---|---|---|---|
1 | 2 | ||
1 | 3 | Y | |
1 | 4 | Y | 3 |
1 | 5 | 4 | |
1 | 6 | Y | 4 |
1 | 7 | 6 |
我确实有很多 ID,所以我需要使用 OVER (PARTITION BY ...)
子句。另外,如果可能的话,我想使用一条语句,比如
SELECT *
, GOAL
FROM TABLE
所以没有任何额外的 select 语句。
T
是升序排列的,所以按照R
取null,往后看取最大值。
select *,
max(case when R is not null then T end)
over (
partition by id
order by T
rows between unbounded preceding and 1 preceding
) as GOAL
from TBL