Il problema
Sto cercando una query per aiutarmi a risolvere quanto segue:
- Ho una serie di eventi
- Ogni evento ha una data di inizio e di fine.
- Molti di questi eventi si sovrappongono
- La risposta che sto cercando è il numero massimo di eventi che si sovrappongono
Esempio
Dire che ho 5 eventi:
- 1 gennaio - > 9 gennaio
- 7 gennaio - > 12 gennaio
- 8 gennaio - > 10 gennaio
- 10 gennaio - > 15 gennaio
- 12 gennaio - > 17 gen
3 di questi eventi si sovrappongono al 9 gennaio, che è il massimo degli eventi sovrapposti, quindi la risposta è 3.
(Ci sono anche 3 eventi che si sovrappongono il 10 gennaio, ma è la stessa risposta)
Quello che ho provato
Se lo stavo facendo in memoria, potrei fare questo:
- Per ogni evento:
- Ottieni la data di inizio
- Conta le date che includono questo evento
- Scegli l'evento con il conteggio più alto.
Ma ci sono 2 problemi con questo:
- Non sembra molto efficiente
- Non è molto SQL-y (cioè è procedurale piuttosto che basato su set)
Domanda
Come posso implementare qualcosa di simile in SQL?
Note
- Non mi interessa trovare le date di inizio / fine degli eventi più sovrapposti. Ho solo bisogno di un conteggio
- Non mi interessa quanto spesso accade il massimo, ho solo bisogno del massimo. Quindi, nell'esempio sopra, so che ci sono due occasioni in cui 3 eventi si sovrappongono, ma ho solo bisogno del "3".
- Se l'evento A termina lo stesso giorno dell'inizio dell'evento B, viene considerato come sovrapposto