PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Mesclar linhas postgres e substituir valores por mais recentes quando não for nulo


Primeiro group by organization_core_id para obter os ids das linhas com os últimos valores não nulos para slug e name e, em seguida, junte-se à tabela:
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

Veja a demonstração .
Resultados:
> organization_core_id | slug           | name      
> -------------------: | :------------- | :---------
>                    1 | dolphin        | Dolphin v2
>                    2 | sea-horse-club | Sea Horse