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

SQL:пребройте всички записи с последователно появяване на една и съща стойност за всеки набор от устройства и върнете най-високия брой

Това е форма на празнини и острови. Можете да използвате разлика в номерата на редовете, за да получите островите:

select device_id, speed, count(*) as num_times
from (select t.*,
             row_number() over (partition by device_id order by datetime) as seqnum,
             row_number() over (partition by device_id, speed order by datetime) as seqnum_s
      from t
     ) t
group by device_id, speed, (seqnum - seqnum_s);

След това, за да получите максимума, използвайте друг слой от функции на прозореца:

select device_id, speed, num_times
from (select device_id, speed, count(*) as num_times,
             row_number() over (partition by device_id order by count(*) desc) as seqnum
      from (select t.*,
                   row_number() over (partition by device_id order by datetime) as seqnum,
                   row_number() over (partition by device_id, speed order by datetime) as seqnum_s
            from t
           ) t
      group by device_id, speed, (seqnum - seqnum_s)
     ) ds
where seqnum = 1;



  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-python:Не мога да отворя включения файл 'config-win.h'

  2. Дати на системата за резервации

  3. Вземете общите отработени часове за един ден mysql

  4. как да сортирам реда на LEFT JOIN в SQL заявка?

  5. Как да изпълня PHP заявка при избор на опция с помощта на AJAX?