Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Consulta SQL para agrupar itens por hora, mas apenas se próximos uns dos outros?


Isso é chamado de "problema das ilhas" e eu vi isso como uma solução (crédito Itzik Ben Gan)
select  tool_number,
        min(time) 'in',
        max(time) 'out',
        count(*)
from    (
    select  tool_number,
            time,
            ROW_NUMBER() OVER (ORDER BY time) - ROW_NUMBER() OVER (PARTITION BY Tool_Number ORDER BY time) AS Grp
    from    #temp
    ) as a
group by grp, tool_number
order by min(time)