un sistema di noleggio utilizza una tabella di prenotazione per memorizzare tutte le prenotazioni e le prenotazioni:Trova abbastanza grande lacune nella tabella di prenotazione
booking | item | startdate | enddate
1 | 42 | 2013-10-25 16:00 | 2013-10-27 12:00
2 | 42 | 2013-10-27 14:00 | 2013-10-28 18:00
3 | 42 | 2013-10-30 09:00 | 2013-11-01 09:00
…
Diciamo che un utente vuole affittare voce 42 dal 2013/10/27 12:00 alle 2013-10-28 12:00, che è un periodo di un giorno. Il sistema gli dirà che l'oggetto non è disponibile in un dato periodo di tempo, dal momento che la prenotazione no. 2 si scontra.
Ora desidero suggerire la data e l'ora di noleggio meno recenti quando l'elemento selezionato è di nuovo disponibile. Naturalmente considerando il periodo richiesto dall'utente (1 giorno) a partire dalla data e ora desiderate dall'utente.
Quindi nel caso precedente, sto cercando una query SQL che restituisce 2013-10-28 18:00, dalla prima data dal 2013-10-27 alle 12:00 in cui l'elemento 42 sarà disponibile per 1 giorno, dal 2013-10-28 alle 18:00 fino al 2013-10-29 alle 18:00.
Quindi ho bisogno di trovare un divario tra le prenotazioni, che è abbastanza grande da contenere la prenotazione dell'utente e che è il più vicino possibile alla data di inizio desiderata.
O in altre parole: ho bisogno di trovare la prima prenotazione per un determinato articolo, dopo di che c'è abbastanza tempo libero per effettuare la prenotazione dell'utente.
Ciò è possibile in SQL semplice senza dover eseguire iterazioni su ogni prenotazione e sul suo successore?
"il più vicino possibile alla data di inizio desiderata." Significa veramente "il prima possibile * o dopo * la data/ora di inizio desiderata?" –
@OllieJones Significa il prima possibile * dopo * la data/ora desiderata. – Rob
I sistemi di prenotazione di solito hanno una granularità definita, è questo il tuo caso? * (I tempi di prenotazione devono essere orari esatti, o forse consentire minuti, ma solo in multipli di 15? 12:00, 12:15, ecc.?) * – MatBailie