Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gruppierung bei Statusänderung

Sie können dies mit der Different-of-Row-Number-Methode tun. Der Unterschied von row_number() -- mit bestimmten Argumenten -- identifiziert Gruppen. Der Rest ist nur Aggregation:

select status, min(time), max(time)
from (select t.*,
             (row_number() over (order by time) -
              row_number() over (partition by status order by time)
             ) as grp
      from mytable t
     ) t
group by status, grp;