将多行数据合并为每个 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
我尝试通过使用 distinct
或 group 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
我有一个每个类别有多个日期的原始数据,我使用代码 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
我尝试通过使用 distinct
或 group 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