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

MySQL връща първия и последния запис за последователни идентични резултати

Най-лесният начин да се подходи към това е използването на променливи и мисля, че най-лесният подход е да добавите две променливи, едната е броя на "нагоре", а другата - броя на "надолу" до всеки даден ред. Дадена последователност от възходи има постоянна стойност за броя на предходните "надолу" и обратно. Тази логика може да се използва за агрегиране.

Получената заявка е:

select result, min(time_stamp) as start_time, max(time_stamp) as end_time
from (select r.*,
             (@ups := @ups + (result = 'up')) as ups,
             (@downs := @downs + (result = 'down')) as downs
      from results r cross join
           (select @ups := 0, @downs := 0) vars
      where service_id = 1
      order by time_stamp
     ) r
group by result, (case when result = 'up' then downs else ups end);



  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

  2. Самостоятелен MySQL сървър

  3. Намерете най-близкото местоположение по пощенски код?

  4. Правилен формат за PDO и MySQL IN/NOT IN заявки

  5. Unix времеви печат спрямо дата и час