Gemiddelde bezetting per maand uitrekenen
De desbetreffende tabellen zien er ongeveer als volgt uit:
Kamers: Kamernr, <kamertype>, date_opened, date_closed
Boekingen: Boekingnr, <kamernr>, vanaf_datum, tot_datum
(Bold geeft Primary key, <> geven een foreign key aan)
De meest logische manier lijkt mij om eerst een view te creeeren welke de beschikbaarheid en de bezetting per dag weergeeft. Echter kan ik me niet bedenken hoe ik een view creeer welke per dag een gemiddelde geeft.
Wie heeft er een mooie voorbeeldje voor me?
Ik snap dat je rekening houdt met nieuwe gebouwen.. Maar er komt toch niet elke dag 1 bij ofzo? Kan je het dan niet aanpassen op het moment dat er gebouwd wordt?
En uiteindelijk wordt de query ook wel stukje ingewikkelder.. in het voorbeeldje gaat het om kamers van 1 hotel, maar uiteindelijk gaat het over meerdere hotels. Echter is dat niet iets om hier in te verwerken aangezien ik denk dat ik daar wel uit ga komen ;)
Gewijzigd op 01/01/1970 01:00:00 door Ano Niem
Hoe wil je uberhaupt ouput krijgen zonder hulp van een programmeertaal? Buiten dat, een database is keurig in staat alles zelf te berekenen, het is gewoon een kwestie van goede queries opstellen. Als je Oracle of PGSQL gebruikt kun ook in andere talen (C++, C, PERL) functies schrijven voor de database.
En als ik een query heb kan ik deze in een VIEW gieten...
En ik ben dus opzoek naar die juiste query's om op te stellen.
maar je wilt dus berekenen hoeveel procent van het totaal aantal kamers er ook daadwerkelijk geboekt zijn.
Waar het mij om gaat is om het aantal geboekte en beschikbare kamers te bereken op elke dag van de maand.
Dagen waarop er geen check-in of check-out plaatsvindt hebben nog wel een bezetting ;) Deze bezetting dient ook meegenomen te worden in de berekening.
Stel dat er 5 van de 10 kamers verhuurd zijn... allen van 21-12-05 tot 31-23-05. Dan wil ik ook voor 22-12-05 zien dat er 5 kamers zijn geboekt.
Quote:
De desbetreffende tabellen zien er ongeveer als volgt uit:
Kamers: Kamernr, <kamertype>, date_opened, date_closed
Boekingen: Boekingnr, <kamernr>, vanaf_datum, tot_datum
(Bold geeft Primary key, <> geven een foreign key aan)
Kamers: Kamernr, <kamertype>, date_opened, date_closed
Boekingen: Boekingnr, <kamernr>, vanaf_datum, tot_datum
(Bold geeft Primary key, <> geven een foreign key aan)
Kan je niet een AVG maken direct zonder die view te maken, subquery's e.d. zijn ook gewoon toegestaan.
Ik ga morgen op me werk wel ff de documentatie induiken over procedures en while loopjes in Oracle. Dat is voor mij nog nieuw terrein, maar mogelijk wel de oplossing :)
Sickness schreef op 12.10.2008 20:25:
Jurgen: Oracle heeft een perfecte command line tool ;)
En als ik een query heb kan ik deze in een VIEW gieten...
En ik ben dus opzoek naar die juiste query's om op te stellen.
En als ik een query heb kan ik deze in een VIEW gieten...
En ik ben dus opzoek naar die juiste query's om op te stellen.
Dat weet ik, maar dit ga je toch niet aan je gebruikers tonen d.m.v. commandline mag ik hopen?
Dit is een onderdeeltje van een project voor school, de applicatie hoeft ik alleen te bouwen mits daar tijd voor is. En alhoewel school waarschijnlijk ook wel akkoord gaat met een halfbakken query is dat niet wat ik in wil leveren.
Uiteraard niet voor iedere dag een rij, maar alleen als er een kamer/gebouw bij komt een rij toevoegen.
Iets als dit:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
TABEL KAMERTELLER
id | aantal_kamers | datum
1 28 1-1-1970
2 30 12-12-1987
3 46 4-3-1990
4 123 12-9-1999
5 232 13-10-2008
id | aantal_kamers | datum
1 28 1-1-1970
2 30 12-12-1987
3 46 4-3-1990
4 123 12-9-1999
5 232 13-10-2008
Je kan dan (database/php) berekenen hoeveel kamers er in totaal waren.
Dat is even een loopje opzetten.
Aantal dagen heb je zo berekenend.
Aantal kamers (dag * aantal kamers die dag) ook
Aantal kamers/aantal dagen = gemiddelde.
Aantal Kamers open gegeven moment = kamers met open_date <= Datum < closed_date
Aantal Geboekt op gegeven moment = boekingen met begin_datum <= Datum < eind_datum
Daarmee moet je in ieder geval het percentage van dag tot dag kunnen berekenen.., die reeks optellen en delen door het aantal dagen in een maand en dan heb je het gemiddelde bezettingspercentage van een maand toch?
Hoe ik gemiddeldes en percentages moet uitrekenen hoef je me echt niet te vertellen. (Joshua) En het bijhouden van hoeveel kamers er zijn in een losse tabel is natuurlijk ook onzin als die informatie gewoon beschikbaar is per kamer. (Eddy)
Ik weet dat het mogelijk is zonder tussenkomst van externe applicaties, de vraag is alleen hoe.
Post eens je datamodel want ik snap nog steeds niet wat er nu de bedoeling is. Wat ik er wel van snap (de berekeningen) die kunnen allemaal met SQL.
Ik post morgen wel ff het relevante stukje ERD :)
http://img408.imageshack.us/my.php?image=hotellk1.jpg
De queries om gemiddelden op te vragen van een bepaalde lukt me wel:
SELECT (SELECT
COUNT(*)
FROM Kamer k
WHERE TO_DATE(k.van_datum) < SYSDATE
AND TO_DATE(k.tot_datum) > SYSDATE
AND ROWNUM = 1) as "Beschikbaar",
COUNT(*) as "Bezet"
FROM Boeking b
WHERE TO_DATE(b.Boeking_vanaf) < SYSDATE
AND TO_DATE(b.Boeking_tot > SYSDATE;
Nu dus iets om binnen SQL deze query voor elke dag van de maand uit te voeren.
De queries om gemiddelden op te vragen van een bepaalde lukt me wel:
SELECT (SELECT
COUNT(*)
FROM Kamer k
WHERE TO_DATE(k.van_datum) < SYSDATE
AND TO_DATE(k.tot_datum) > SYSDATE
AND ROWNUM = 1) as "Beschikbaar",
COUNT(*) as "Bezet"
FROM Boeking b
WHERE TO_DATE(b.Boeking_vanaf) < SYSDATE
AND TO_DATE(b.Boeking_tot > SYSDATE;
Nu dus iets om binnen SQL deze query voor elke dag van de maand uit te voeren.
Gewijzigd op 01/01/1970 01:00:00 door Ano Niem