sql >> Database >  >> RDS >> Mysql

Haal de laatste niet-null-record van elke kolom op voor elke record_id in MySQL

Deze kan je probleem oplossen:

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
;

Het is misschien niet zo snel als andere antwoorden, maar is een andere versie ... probeer het eens. Als je een Data3 . hebt kolom in uw tabel, kunt u de Data1 . kopiëren/plakken kolom en verander gewoon alle verwijzingen van deze kolom naar de nieuwe.

Om uit te leggen hoe dit werkt:de group_concat functie voegt alle niet-null-waarden van een kolom samen met een scheidingsteken (, standaard). U kunt de kolom vóór de aaneenschakeling bestellen. Het werkt een beetje als een vensterfunctie in Oracle, Postgre en anderen... De substring_index krijgt net de eerste aaneengeschakelde waarde, omdat de lijst in aflopende volgorde van tijd staat.



  1. Wat is er mis met deze FIRST_VALUE-query?

  2. Toegang geweigerd wanneer rails verbinding maakt met Mysql

  3. Het probleem met vensterfuncties en weergaven

  4. Capistrano:hoe MySQL-database implementeren voor een PHP-toepassing?