我有一张桌子,就像:
ID | LOAD_DATE | START_VAL | END_VAL |
---|---|---|---|
1 | 2023-06-01 | NULL | 7 |
1 | 2023-06-03 | NULL | 5 |
1 | 2023-06-03 | 5 | 7 |
2 | 2023-06-08 | NULL | 2 |
2 | 2023-06-09 | NULL | 3 |
2 | 2023-06-10 | NULL | 4 |
我正在try 获取每个ID的最新记录.但是,如果有多个最新日期的记录,我希望保留每个ID的最新记录,其中Start_Val和End_Val不为空.例如,对于ID 1,有两条日期为2023-06-03的记录,但如果存在Start_Val和End_Val都不为空的记录,我想要确定记录的优先级.
我try 了如下查询:
SELECT *
FROM MY_TABLE
QUALIFY ROW_NUMBER() OVER (PARTITION BY ID ORDER BY LOAD_DATE DESC) = 1;
但是,这将返回一个表,如
ID | LOAD_DATE | START_VAL | END_VAL |
---|---|---|---|
1 | 2023-06-03 | NULL | 5 |
2 | 2023-06-10 | NULL | 4 |
因此,对于ID 1,START_VAL和END_VAL均为NOT NULL的记录在QUALIFY语句中不区分优先级.有没有办法在分区中定义这种逻辑?