【发布时间】:2021-11-26 03:03:32
【问题描述】:
我的基础数据包含多个在同一日期发生的实验室项目(A、B、C)。
id datetime_1 order_datetime item value
-----------------------------------------------------
1 9/1/21 09:57 9/2/21 04:21 A 13
1 9/1/21 09:57 9/2/21 04:21 B 8
1 9/1/21 09:57 9/2/21 04:21 C 11
1 9/1/21 09:57 9/3/21 16:00 A 10
1 9/1/21 09:57 9/3/21 16:00 B 4
1 9/1/21 09:57 9/3/21 16:00 C 7
1 9/2/21 02:30 9/2/21 04:21 A 13
1 9/2/21 02:30 9/2/21 04:21 B 8
1 9/2/21 02:30 9/2/21 04:21 C 11
1 9/2/21 02:30 9/3/21 16:00 A 10
1 9/2/21 02:30 9/3/21 16:00 B 4
1 9/2/21 02:30 9/3/21 16:00 C 7
我需要输出显示为:
id datetime_1 a_level b_level c_level
------------------------------------------------
1 9/1/21 09:57 13 8 11
1 9/2/21 02:30 13 8 11
我当前的代码是:
with lab_setup as (
select id, datetime_1, row_number() over (partition by id, datetime_1 order by order_datetime) as lab_order)
from data
group by id, datetime_1, order_datetime
)
, lab_first as (
select id, datetime_1,
max(case when item = 'A' then value end) as a_level,
max(case when item = 'B' then value end) as b_level,
max(case when item = 'C' then value end) as c_level
from lab_setup
group by id, datetime_1, item, value
)
select *
from lab_first
group by id, datetime_1, a_level, b_level, c_level
问题是我不断收到重复行以响应此代码,如下所示:
id datetime_1 a_level b_level c_level
------------------------------------------------
1 9/1/21 09:57 13 null null
1 9/1/21 09:57 null null 11
1 9/1/21 09:57 null 8 null
我已经尝试过distinct、group by、max(case when),但到目前为止,它仍然为每个datetime_1 提供多行,这不是我想要的。有谁知道如何帮助将这些多行合并为一个?
【问题讨论】:
标签: postgresql group-by max distinct