首页 > 解决方案 > 使用最早日期提取最早记录并过滤其他值

问题描述

我目前有一张桌子,上面有多个实验室订单,这些订单通常集中在一个实验室订单中,每个订单都有不同的组件和价值。我正在尝试提取datetime_1每个患者 ( id) 参考日期 ( ) 之后最早实验室测试日期的每个组成部分的值。

以下是样本数据:

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

我的输出显示了每个item(A, B, C) 之后的最早级别datetime_1

我试过了:

select id, 
    row_number() over (partition by id, datetime_1 order by order_datetime) as lab_order,
    case when lab_order = 1 and item = 'A' then value else null end as a_level

但是由于在同一日期有 A、B、C 值,这会产生很多重复并弄乱lab_order.

如果有人可以帮助最好地在最早的日期捕获每个值,我将不胜感激。

标签: postgresqlcaserow-number

解决方案


推荐阅读