PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Fusionner les lignes postgres et remplacer les valeurs par les dernières lorsqu'elles ne sont pas nulles

Premier group by organization_core_id pour obtenir les identifiants des lignes avec les dernières valeurs non nulles pour slug et name puis rejoignez la table :

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

Voir la démo .
Résultats :

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