Scusami, avevo male interpretato l'esigenza.
Secondo me ci sono due modi di procedere:
il calcolo dei tempi avviene al momento dell'inserimento, cioè quando inserisci un evento di chiusura immediatamente viene calcolato il tempo trascorso dal precedente evento di apertura e memorizzato nel db
il calcolo avviene a posteriori. In questo caso devi creare una sorta di "sequencer" che, messi in ordine gli eventi, ne fa la scansione facendo tutti i calcoli del caso.
Quindi, quando incontra un evento di apertura, va a cercare il successivo evento di chiusura e calcola i tempi.
È chiaro che devi prevedere anche la possibilità di errori, cioè due eventi di apertura consecutivi oppure due eventi di chiusura consecutivi oppure l'assenza totale di uno dei due eventi.
Spero di essere stato d'aiuto