Avatar billede segato Nybegynder
31. marts 2012 - 17:55 Der er 13 kommentarer og
1 løsning

Næste ledige dato

Har en booking tabel med to kollonner StartDato og SlutDato. Hvordan får man næste ledige dato? I tabellen ligger der en række af bookings og skal finde næste ledige dato for en given service. Kan dette lade sig gøre i SQL hvis ja hvordan?
Avatar billede Slettet bruger
31. marts 2012 - 20:20 #1
Hvis det er i forhold til den seneste SlutDato (og din tabel kalder vi Booking):
SELECT TOP 1 SlutDato+1 FROM Booking ORDER BY SlutDato DESC
Avatar billede arne_v Ekspert
31. marts 2012 - 22:06 #2
kunne lave som

SELECT MAX(slutdatao)+1 FROM booking

og da jeg ikke ved om dato+1 giver naeste dag, saa ville jeg nok lave

SELECT MAX(slutdatao) FROM booking

og lade app laegge en til.
Avatar billede sifuentes Nybegynder
01. april 2012 - 22:31 #3
Arnes svar forudsætter visse antagelser/forudsætninger, som hverken fremgår af kravspecifikationerne eller Arnes svar.
Avatar billede arne_v Ekspert
01. april 2012 - 22:43 #4
hvilke forudsaetninger mangler for at

SELECT MAX(slutdatao)+1 FROM booking

laver det samme som

SELECT TOP 1 SlutDato+1 FROM Booking ORDER BY SlutDato DESC

?
Avatar billede sifuentes Nybegynder
01. april 2012 - 22:53 #5
Undskyld! Det er mig, jeg har ikke nærlæst godt nok. Men det kunne jo godt være at der var "hul" til en booking hvis man kendte omfanget(varigheden) af den bookede service.
Avatar billede segato Nybegynder
02. april 2012 - 00:09 #6
Hej begge kigger det lige igennem i morgen. Det er der er det sværre er de forskellige bookinger ikke nødvendigvis ligger lige efter hinananden og at den første ledeige kan være imellem to bookinger. Men kigger lige på jeres svar i morgen.
Avatar billede arne_v Ekspert
02. april 2012 - 02:13 #7
ah ja - hvis vi forlader find sidste og læg en til og går tilbage til selve problemet så er der masser ting som skal overvejes:
- kan man bruge et hul?
- er det OK at booke weekend/påskferie/juleferie?
etc.
Avatar billede segato Nybegynder
02. april 2012 - 08:23 #8
Jeg tror den nemmeste måde at forklare det på er nok som du selv skriver find første hul eller i dag hvis der ikke er nogle bookinger. Det må heller ikke være en søndag, men første del ville også være fint inde for scope af det her spørgsmål :D Jeg tænker lidt om man kan select'e alle huller der er imellem en række bookinger så kunne man evt håndtere den sidste del i koden (selvom det ville være smukt hvis man også kunne håndtere det i sql).
Avatar billede janus_007 Nybegynder
02. april 2012 - 16:00 #9
Segatom, min gamle kammerat :)

Glem det med 2 kolonner(det er for teoretisk), lav det med 1 kolonne istedet og bare fyr nogle datoer ind, langt nemmere at have med at gøre.

Og ja... det fylder lidt mere, men det er supergenialt, og pyt med størrelsen.. i vores fagre nye verden er bit den nye byte eller var det omvendt.
Avatar billede janus_007 Nybegynder
02. april 2012 - 16:00 #10
uden m :)
Avatar billede segato Nybegynder
02. april 2012 - 16:27 #11
Hej Janus gamle dreng. Kan du uddybe lidt hvad du mener med kolonner? Snakker vi om en type jeg ikke kender (DateSpan eller lignede)?
Avatar billede janus_007 Nybegynder
02. april 2012 - 21:16 #12
Normal stil er jo at have en StartDate og en EndDate eller sådan noget, men jeg har mange gange fundet det langt lettere bare at have en kolonne...

eks.vis BookingDate

Tabellen kunne se sådan her ud:

BookingId int
ServiceId int
BookingDate datetime

Når en så booker service 2 i perioden imellem 01.04 og 04.04, vil det blive indsat som:

2  01.04
2  02.04
2  03.04
2  04.04

Derved er det ret nemt at lave en forespørgsel, eks.vis
select max(BookingDate) from Table where ServiceId = 2

Og hvis man vil have "huller", så left joines der blot sammen med en datotabel som har alle tilgængelige datoer for den pågældende service. Der findes mange scripts i tsql der kan generere datotabeller.

Det er som sagt lidt anderledes end hvad man ellers ser, men jeg finder den sære model her meget anvendelig :)
Avatar billede segato Nybegynder
03. april 2012 - 09:09 #13
Ja det vil faktisk løse problem stillingen, plus det at vise data i evt. en kalender kontrol vil være nemmere. Den metode havde jeg ikke lige overvejet. Tak for det gamle dreng, smid et svar!
Avatar billede janus_007 Nybegynder
03. april 2012 - 12:50 #14
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester