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

Recupera l'ultimo record non nullo di ogni colonna per ogni record_id in MySQL

Questo potrebbe risolvere il tuo problema:

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
;

Potrebbe non essere veloce come altre risposte, ma è un'altra versione... provalo. Se hai un Data3 colonna nella tabella, puoi copiare/incollare i Data1 colonna e cambia semplicemente tutti i riferimenti di questa colonna con quella nuova.

Giusto per spiegare come funziona:il group_concat La funzione concatena tutti i valori non nulli di una colonna con un separatore (, per impostazione predefinita). È possibile ordinare la colonna prima della concatenazione. Funziona un po' come una funzione finestra in Oracle, Postgre e altri... Il substring_index sta solo ottenendo il primo valore concatenato, poiché l'elenco è in ordine di tempo decrescente.