Gemiddelde bezetting per maand uitrekenen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ano Niem

Ano Niem

12/10/2008 19:52:00
Quote Anchor link
Ik ben opzoek naar een manier om de gemiddelde bezetting van een hotel te berekenen in SQL (Liefst Oracle compatible maar anders is MySQL ook goed, dus zonder tussenkomst van PHP of een andere taal!). Nu is het geval dat er kamers bij kunnen komen (bijv door de bijbouw van een nieuw gebouw o.i.d.) Dus er moet eigenlijk per dag gekeken worden wat de bezetting is om aan de hand hiervan een gemiddelde per maand uit te kunnen rekenen.

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?
 
PHP hulp

PHP hulp

25/04/2024 08:30:31
 
--

--

12/10/2008 19:54:00
Quote Anchor link
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?
 
Ano Niem

Ano Niem

12/10/2008 20:00:00
Quote Anchor link
Maar als ik nou eens rapportages van verschillende jaren wil vergelijken zouden deze niet meer kloppen ;) Als er meer kamers bijkomen zou de bezettingsgraad dalen over de eerdere jaren.

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
 
Jurgen assaasas

Jurgen assaasas

12/10/2008 20:16:00
Quote Anchor link
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.
 
Ano Niem

Ano Niem

12/10/2008 20:25:00
Quote Anchor link
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.
 
Nicoow Unknown

Nicoow Unknown

12/10/2008 22:01:00
Quote Anchor link
maar je wilt dus berekenen hoeveel procent van het totaal aantal kamers er ook daadwerkelijk geboekt zijn.
 
Ano Niem

Ano Niem

12/10/2008 22:15:00
Quote Anchor link
Mjah, het percentage zou hier een proces gegeven zijn van 'kamers geboekt' delen door 'kamers beschikbaar'. Dat percentage berekenen is eitje :P

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.
 
Robert Deiman

Robert Deiman

12/10/2008 23:13:00
Quote Anchor link
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)


Kan je niet een AVG maken direct zonder die view te maken, subquery's e.d. zijn ook gewoon toegestaan.
 
Ano Niem

Ano Niem

12/10/2008 23:30:00
Quote Anchor link
Nee, want dan moet ik eerst per dag het aantal geboekte kamers weten.

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 :)
 
Jurgen assaasas

Jurgen assaasas

13/10/2008 12:32:00
Quote Anchor link
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.


Dat weet ik, maar dit ga je toch niet aan je gebruikers tonen d.m.v. commandline mag ik hopen?
 
Ano Niem

Ano Niem

13/10/2008 21:18:00
Quote Anchor link
Wie weet, maar als ik nou eens verschillende applicaties wil laten draaien op die ene database ;) Dan moet ik elke keer (voor elke taal iig) opnieuw de afhandeling gaan schrijven? :s

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.
 
Eddy E

Eddy E

13/10/2008 22:06:00
Quote Anchor link
Persoonlijk zou ik een extra tabel maken met daarin per datum bijhouden hoeveel kamers er zijn.

Uiteraard niet voor iedere dag een rij, maar alleen als er een kamer/gebouw bij komt een rij toevoegen.

Iets als dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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.
 
Joshua Angnoe

Joshua Angnoe

13/10/2008 22:36:00
Quote Anchor link
Bezetting per dag:

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?
 
Ano Niem

Ano Niem

14/10/2008 09:05:00
Quote Anchor link
Oké nog even voor de duidelijkheid: Ik wil weten hoe ik per dag een gemiddelde krijg alleen m.b.v. SQL. Dus van elke dag een gemiddelde... ook als er geen check-in/out plaatsvind.

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.
 
Jurgen assaasas

Jurgen assaasas

14/10/2008 09:55:00
Quote Anchor link
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.
 
Ano Niem

Ano Niem

14/10/2008 22:28:00
Quote Anchor link
Ik post morgen wel ff het relevante stukje ERD :)
 
Ano Niem

Ano Niem

15/10/2008 14:59:00
Quote Anchor link
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.
Gewijzigd op 01/01/1970 01:00:00 door Ano Niem
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.