Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL restituisce il primo e l'ultimo record per risultati identici consecutivi

Il modo più semplice per avvicinarsi a questo è usare le variabili e penso che l'approccio più semplice sia aggiungere due variabili, una il numero di "su" e l'altra il numero di "giù" su una determinata riga. Una data sequenza di up ha un valore costante per il numero di "down" precedenti e viceversa. Questa logica può essere utilizzata per l'aggregazione.

La query risultante è:

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