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

Gruppér rækker, hvis de har overlappende tidsintervaller

WITH C1 AS (
SELECT *,
  CASE 
WHEN start_time <= MAX(IFnull(end_time,'9999-12-31 00:00:00.000')) OVER(
  partition by id
  ORDER BY start_time 
  ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
  ) 
  THEN 0 
  ELSE 1 
END AS isstart
FROM activity
) 
SELECT ID,start_time,end_time,
   SUM(isstart) OVER(partition by id ORDER BY ID ROWS UNBOUNDED PRECEDING) AS DG 
FROM C1;

Dette burde virke for dig



  1. Vælg kolonner fra én tabel baseret på kolonnenavnene fra en anden tabel

  2. Kan jeg lave en atomic MERGE i Oracle?

  3. Hurtig mySQL leaderboard med spillerrangering (og omgivende spillere)

  4. Hvordan får man en alder fra et D.O.B-felt i MySQL?