PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Führen Sie Zeilen postgres zusammen und ersetzen Sie die Werte durch die neuesten, wenn sie nicht null sind

Zuerst group by organization_core_id um die IDs der Zeilen mit den letzten Nicht-Null-Werten für slug zu erhalten und name und treten Sie dann der Tabelle bei:

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

Sehen Sie sich die Demo an .
Ergebnisse:

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