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?
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:

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.
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?


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

Reageren