sql >> Base de Datos >  >> RDS >> Mysql

Recupere el último registro no nulo de cada columna para cada record_id en MySQL

Este puede resolver su 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
;

Puede que no sea tan rápido como otras respuestas, pero es otra versión... pruébalo. Si tiene un Data3 columna en su tabla, puede copiar/pegar el Data1 columna y simplemente cambie todas las referencias de esta columna a la nueva.

Solo para explicar cómo funciona esto:el group_concat La función concatena todos los valores no nulos de una columna con un separador (, por defecto). Puede ordenar la columna antes de la concatenación. Funciona un poco como una función de ventana en Oracle, Postgre y otros... El substring_index solo obtiene el primer valor concatenado, ya que la lista está en orden descendente de tiempo.