我具有以下格式的数据:
ID DATE METRIC
1 1/1/19 1
1 1/3/19 1
1 1/5/19 0
2 1/2/19 0
2 1/9/19 0
2 1/11/19 0
3 1/1/19 0
3 1/2/19 0
3 1/3/19 1
我要完成的工作是每个ID仅占用一行,如果度量标准为1,则第一个日期为1。如果度量标准为1,则该行为NULL,日期为NULL。我想要的输出看起来像这样:
ID DATE METRIC
1 1/1/19 1
2 NULL 0
3 1/3/19 1
我最近来的是执行row_number() OVER (PARTITION BY ID order by DATE) as RN
,但是每个ID仅给我编号行。在分区中通过以下方式可以解决问题吗?
您可以使用DISTINCT ON
和条件逻辑:
select distinct on(t.id)
t.id,
case when t.metric = 1 then t.date end date,
metric
from mytable t
order by t.id, t.metric desc, t.date
id |日期|公制-:| :--------- | -----:1 | 2019-01-01 | 1个2 | 空 | 03 | 2019-03-01 | 1个