Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Recupere o último registro não nulo de cada coluna para cada record_id no MySQL


Este pode resolver seu 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
;

Pode não ser tão rápido quanto outras respostas, mas é outra versão... experimente. Se você tiver um Data3 coluna em sua tabela, você pode copiar/colar o Data1 coluna e apenas altere todas as referências desta coluna para a nova.

Apenas para explicar como isso funciona:o group_concat função concatena todos os valores não nulos de uma coluna com um separador (, por padrão). Você pode ordenar a coluna antes da concatenação. Funciona um pouco como uma função de janela no Oracle, Postgre e outros... O substring_index está apenas obtendo o primeiro valor concatenado, pois a lista está em ordem decrescente de tempo.