Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL retorna o primeiro e o último registro para resultados idênticos consecutivos


A maneira mais fácil de abordar isso é usar variáveis ​​e acho que a abordagem mais fácil é adicionar duas variáveis, uma o número de "up"s e a outra o número de "down"s até qualquer linha. Uma determinada sequência de subidas tem um valor constante para o número de "descidas" anteriores e vice-versa. Essa lógica pode ser usada para agregação.

A consulta resultante é:
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);