Mi stavo chiedendo se potessi aiutarmi su un problema SQL che sto riscontrando.
Ho una serie di record di eventi in cui ogni evento ha un'ora di inizio e un'ora di fine. Nessun evento ha la stessa ora di inizio e l'ora di fine di ogni evento è maggiore o uguale all'evento precedente.
Quello che voglio essere in grado di fare è estrarre il set di record che non si sovrappongono - dove l'ora di inizio di un evento non è tra l'inizio / la fine di qualsiasi altro evento. Nell'esempio seguente, il tempo di inizio per B / C / D è tra l'inizio e la fine di A, quindi voglio mantenere A e sbarazzarmi di B, C, D. Quindi ricomincia da capo, mantenendo E, e sbarazzati di F, quindi ricomincia e mantieni G, sbarazzandosi di H / I, ecc.
Sembra che questo richiede un auto join ma non riesco a capire i criteri per identificare i record in questo modo. Qualche idea?
Event | Start | End
A 1 10 (keep)
B 2 11 (discard because start time of 2 < 10)
C 5 15 (discard because start time of 5 < 10)
D 9 12 (discard because start time of 9 < 10)
E 10 13 (keep - this starts a new set because it’s the first record after A with start >= A end)
F 11 20 (discard because 11 < 13)
G 14 22 (keep - this starts a new set because it’s the first record after E with start >= E)
H 15 22 (discard because 15 < 22)
I 17 27 (discard because 17 < 22)
J 22 27 (keep - this starts a new set because it’s the first record after G with start >= G)