将多行数据合并为每个 id 一行

Combining multiple rows of data to one row per id

我有一个每个类别有多个日期的原始数据,我使用代码 case when category = 'referral' then min(date) end as date_referral 获取每个 id 每个类别的最早日期。

但是,它不会 return 一行中的数据,而是按类别创建行,因此:

id    date_entered      date_referral      date_reply        date_final
-------------------------------------------------------------------------
1      2020-12-20           null              null              null 
1      2020-12-20         2020-12-21          null              null 
1      2020-12-20           null            2020-12-21          null 
1      2020-12-20           null              null            2020-12-24

我尝试通过使用 distinctgroup by(分别和一起)强制执行单行:

select distinct id
, date_entered
, case when category = 'referral' then min(date) end as date_referral
, case when category = 'reply' then min(date) end as date_reply 
, case when category = 'final' then min(date) end as date_final

from data
group by id
, date_entered
, category

但它会保持 returning 多行,每行都是按类别计算的最早日期。我也尝试在这段代码之后创建 cte 到 select distinct id, date_entered, date_referral, date_reply, date_final from table 但那仍然是 returns 多行..

如何合并这些行并使其成为 return 一行?

你不应该按 category.
分组 像这样使用条件聚合:

select id, date_entered,
       min(case when category = 'referral' then date end) as date_referral,
       min(case when category = 'reply' then date end) as date_reply, 
       min(case when category = 'final' then date end) as date_final
from data
group by id, date_entered