sql >> Databasteknik >  >> RDS >> Mysql

Hämta den sista icke-nullposten i varje kolumn för varje record_id i MySQL

Den här kan lösa ditt problem:

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
;

Det kanske inte är lika snabbt som andra svar, men det är en annan version... prova. Om du har en Data3 kolumnen i tabellen kan du kopiera/klistra in Data1 och ändra bara alla referenser i denna kolumn till den nya.

Bara för att förklara hur detta fungerar:group_concat funktion sammanfogar alla icke-nullvärden i en kolumn med en separator (, som standard). Du kan beställa kolumnen före sammanlänkningen. Det fungerar lite som en fönsterfunktion i Oracle, Postgre och andra... substring_index får bara det första sammanlänkade värdet, eftersom listan är i fallande tidsordning.



  1. Finns det en standardmetod för att hantera oordnade arrayer (uppsättningar) i PostgreSQL?

  2. Hur fixar man fel som orsakas av att libmysqlclient.15.dylib inte laddas?

  3. Behöver hjälp med att para databasvärden

  4. Hur man släpper alla primärnycklar från alla tabeller i SQL Server Database - SQL Server / TSQL Tutorial Del 65