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

SQL:spočítá všechny záznamy s po sobě jdoucím výskytem stejné hodnoty pro každou sadu zařízení a vrátí nejvyšší počet

Toto je forma mezer a ostrovů. K získání ostrovů můžete použít rozdíl čísel řádků:

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);

Poté, abyste získali maximum, použijte další vrstvu funkcí okna:

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. Jak seskupit časová razítka do ostrovů (na základě libovolné mezery)?

  2. spojit datový sloupec oddělený čárkou

  3. Importujte data do databáze MySQL

  4. Vytvoření virtuálního počítače pomocí virtuálního boxu Oracle VM