Mysql
 sql >> база данни >  >> RDS >> Mysql

Извличане на последния ненулев запис на всяка колона за всеки record_id в MySQL

Това може да реши проблема ви:

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
;

Може да не е толкова бърз, колкото другите отговори, но е друга версия... опитайте. Ако имате Data3 колона във вашата таблица, можете да копирате/поставите Data1 колона и просто променете всички препратки на тази колона към новата.

Само за да обясня как работи това:group_concat функцията обединява всички ненулеви стойности на колона с разделител (, по подразбиране). Можете да поръчате колоната преди конкатенацията. Работи малко като прозоречна функция в Oracle, Postgre и други... substring_index просто получава първата свързана стойност, тъй като списъкът е в низходящ ред по време.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Atomic UPDATE в InnoDB срещу MyISAM

  2. Пребройте честотата на всяка дума

  3. Лесен начин за генериране на колона с име на охлюв от колоната с име?

  4. Как да вмъкнете DECIMAL в MySQL база данни

  5. Как да генерирам/автоматично инкрементираме водач при вмъкване без тригери и ръчни вмъквания в mysql?