Mysql
 sql >> Base de données >  >> RDS >> Mysql

Récupérer le dernier enregistrement non nul de chaque colonne pour chaque record_id dans MySQL

Celui-ci peut résoudre votre problème :

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
;

Ce n'est peut-être pas aussi rapide que d'autres réponses, mais c'est une autre version ... essayez-le. Si vous avez un Data3 colonne de votre tableau, vous pouvez copier/coller les Data1 colonne et remplacez simplement toutes les références de cette colonne par la nouvelle.

Juste pour expliquer comment cela fonctionne :le group_concat la fonction concatène toutes les valeurs non nulles d'une colonne avec un séparateur (, par défaut). Vous pouvez ordonner la colonne avant la concaténation. Cela fonctionne un peu comme une fonction de fenêtre dans Oracle, Postgre et autres... Le substring_index obtient juste la première valeur concaténée, car la liste est dans un ordre décroissant de temps.