sql >> Database teknologi >  >> RDS >> Mysql

Hent sidste ikke-nul-record i hver kolonne for hver record_id i MySQL

Denne kan løse dit problem:

select 
  record_id,
  substring_index(group_concat(Data1 order by Time desc), ',', 1) Data1,
  substring_index(group_concat(Data2 order by Time desc), ',', 1) Data2,
  substring_index(group_concat(Time  order by Time desc), ',', 1) Time
from records
group by record_id
;

Det er måske ikke så hurtigt som andre svar, men det er en anden version... prøv det. Hvis du har en Data3 kolonne i din tabel, kan du kopiere/indsætte Data1 kolonne og skift blot alle referencer i denne kolonne til den nye.

Bare for at forklare, hvordan dette virker:group_concat funktion sammenkæder alle ikke-nullværdier i en kolonne med en separator (, som standard). Du kan bestille kolonnen før sammenkædningen. Det fungerer lidt som en vinduesfunktion i Oracle, Postgre og andre... substring_index får bare den første sammenkædede værdi, da listen er i faldende tidsrækkefølge.



  1. Heroku Postgres Fejl:PGError:ERROR:Relationsorganisationer eksisterer ikke (ActiveRecord::StatementInvalid)

  2. Postgres-sekvenser uden en 'ejet af'-attribut returnerer ikke et id i Django 1.3

  3. mysqldump samtidighed

  4. Postgresql 11:Stored Procedure call error - For at kalde en procedure, brug CALL, Java