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

Как да намеря предишен запис [n-per-group max(timestamp)

Последният подход с променливи е разумен. Можете също да опитате:

SELECT collect.*,
       (select max(timestamp)
        from data
        where data.channel_id = collect.channel_id AND data.timestamp < collect.timestamp
       ) AS prev_timestamp
FROM data AS collect 
WHERE collect.channel_id = 14 AND collect.timestamp >= 0 
ORDER BY collect.timestamp;

Освен това създайте индекси на:collect(channel_id, timestamp).

РЕДАКТИРАНЕ:

Следното може да е най-бързо:

  select d.*,
         if(@channel_id = channel_id, @prev_timestamp, NULL) as prev_timestamp,
         @channel_id := channel_id, @prev_timestamp = timestamp
  from data d cross join
       (select @channel_id := 0, @prev_timestamp := 0) vars
  where collect.channel_id = 14 AND collect.timestamp >= 0 
  order by channel_id, timestamp;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-добри техники за избягване на „изтриване на данни“ от база данни на уебсайтове

  2. Кой тип данни на MySQL да използвате за IP адрес?

  3. MySQL съхранената процедура причинява ли проблеми?

  4. В insert_batch() на Codeigniter с хиляди вмъквания има липсващи записи

  5. SocketException :Не е известен такъв хост