sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-fråga för att gruppera objekt efter tid, men bara om de är nära varandra?

Detta kallas "öproblemet" och jag har sett detta som en lösning (kreditering 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)


  1. Jämför arrayer för likhet, ignorera ordningen av element

  2. Laravel 5:Överträdelse av integritetsbegränsning:1452 Kan inte lägga till eller uppdatera en underordnad rad:en främmande nyckel-begränsning misslyckas

  3. FLOSS UK vårkonferens

  4. Hur får man tillbaka enskilda kolumner från tabellen från en funktion?