sql >> Base de Datos >  >> RDS >> PostgreSQL

Combine filas postgres y reemplace los valores con los últimos cuando no sea nulo

Primer group by organization_core_id para obtener los identificadores de las filas con los últimos valores no nulos para slug y name y luego unirse a la mesa:

select
  t.organization_core_id, 
  t1.slug,
  t2.name
from (
  select 
    organization_core_id, 
    max(case when slug is not null then id end) slugid, 
    max(case when name is not null then id end) nameid
  from tablename
  group by organization_core_id
) t 
left join tablename t1 on t1.id = t.slugid
left join tablename t2 on t2.id = t.nameid

Vea la demostración .
Resultados:

> organization_core_id | slug           | name      
> -------------------: | :------------- | :---------
>                    1 | dolphin        | Dolphin v2
>                    2 | sea-horse-club | Sea Horse