sql >> Databáze >  >> RDS >> Mysql

Načíst poslední nenulový záznam každého sloupce pro každý záznam_id v MySQL

Toto může vyřešit váš problém:

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
;

Možná to není tak rychlé jako jiné odpovědi, ale je to jiná verze... zkuste to. Pokud máte Data3 ve vaší tabulce můžete zkopírovat/vložit Data1 a stačí změnit všechny odkazy tohoto sloupce na nový.

Jen pro vysvětlení, jak to funguje:group_concat funkce zřetězí všechny nenulové hodnoty sloupce s oddělovačem (, ve výchozím stavu). Sloupec si můžete objednat před zřetězením. Funguje to trochu jako funkce okna v Oracle, Postgre a dalších... The substring_index právě získává první zřetězenou hodnotu, protože seznam je v sestupném pořadí.



  1. Existuje snadný způsob, jak zajistit, aby EntityFramework používal výchozí hodnoty SQL?

  2. SQL LIMIT s klauzulí WHERE

  3. DELETE dotaz s WHERE EXISTS v MySQL

  4. Amazon RDS pro PostgreSQL alternativy - ClusterControl pro PostgreSQL