Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Rufen Sie den letzten Nicht-Null-Datensatz jeder Spalte für jede record_id in MySQL ab

Dieser könnte Ihr Problem lösen:

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
;

Es ist vielleicht nicht so schnell wie andere Antworten, aber es ist eine andere Version ... probieren Sie es aus. Wenn Sie eine Data3 haben Spalte in Ihrer Tabelle können Sie die Data1 kopieren/einfügen Spalte und ändern Sie einfach alle Verweise dieser Spalte auf die neue.

Nur um zu erklären, wie das funktioniert:der group_concat Funktion verkettet alle Nicht-Null-Werte einer Spalte mit einem Trennzeichen (, standardmäßig). Sie können die Spalte vor der Verkettung anordnen. Es funktioniert ein bisschen wie eine Fensterfunktion in Oracle, Postgre und anderen ... Der substring_index erhält nur den ersten verketteten Wert, da die Liste in absteigender Reihenfolge der Zeit ist.