我有三列数据。第一列包含 ID,第二列包含日期,第三列包含 BMI 值。我想创建第四列,该列的第一个值基于第三列的日期(升序),该第三列不为空或避免为空。
到目前为止,我已经尝试过普通形式的first_value,但没有成功。我尝试将 case when 语句内的first_value子集为
CASE
WHEN BMI IS NOT NULL THEN (FIRST_VALUE(BMI) OVER PARTITION BY PID ORDER BY DATE))
ELSE 0
END AS FIRSTNOTNULLVALUE_BMI
Run Code Online (Sandbox Code Playgroud)
给了我 0。
id date BMI
1 2000-01-01 NULL
1 2003-05-01 18.1
1 2002-07-15 25.8
2 2009-09-25 NULL
2 2015-04-18 23.5
Run Code Online (Sandbox Code Playgroud)
有什么建议么??
您可以将其放在的CASE中。
然后,空值将被排在该函数的最后。ORDER BYFIRST_VALUE
Run Code Online (Sandbox Code Playgroud)create table test ( pid int, pdate date, BMI decimal(4,1) ) insert into test (pid, pdate, BMI) values (1, '2000-01-01', NULL) , (1, '2003-05-01', 18.5) , (1, '2002-07-15', 24.9) , (2, '2009-09-25', NULL) , (2, '2015-04-18', 21.7) ;
Run Code Online (Sandbox Code Playgroud)select * , first_value(BMI) over (partition by pid order by case when BMI is not null then 1 else 2 end, date(pdate)) as firstBMI from test order by pid, pdatePID | 更新 | 体重指数 | 第一体重指数 :-- | :--------- | :--- | :-------- 1 | 2000-01-01 | 空| 24.9 1 | 2002-07-15 | 24.9 | 24.9 24.9 1 | 2003-05-01 | 18.5 | 18.5 24.9 2 | 2009-09-25 | 空| 21.7 2 | 2015-04-18 | 21.7 | 21.7 21.7
db<>在这里摆弄
| 归档时间: |
|
| 查看次数: |
7090 次 |
| 最近记录: |