Ik ben bezig met een MySQL query, onderdeel hiervan is de beschikbaarheid van een bepaald object. Ik moet het aantal dagen dat het object niet beschikbaar is in een bepaalde tijdsperiode weten.
Ik werk met een al bestaande database waar ik niks aan mag/kan passen, hoe onlogisch de dingen misschien zijn.
Er is een availability tabel (waarin tijdsperiodes staan wanneer een object niet beschikbaar is, misleidende tabelnaam dus!) met de volgende velden:
Tabel availability
Een concreet voorbeeld van wat ik wil:
query: geef mij het aantal dagen dat 1 (object_id) niet beschikbaar is tussen 2007-02-15 en 2007-03-20
met het volgende records in de tabel availability:
object_id: 1 | begin_date: 2007-01-25 | end_date: 2007-02-25 (10 dagen)
object_id: 1 | begin_date: 2007-02-26 | end_date: 2007-02-28 (2 dagen)
object_id: 1 | begin_date: 2007-03-19 | end_date: 2007-03-21 (2 dagen)
Dit zou dus 14 dagen moeten opleveren.
Een periode kan er dus gedeeltelijk of geheel in vallen. Als de opgegeven tijdsperiode er gedeeltelijk in valt dan moeten ook alleen maar de dagen worden opgeteld die er in vallen, als de opgegeven tijdsperiode er geheel in valt dan moeten alle dagen worden opgeteld.
Het is me wel al gelukt om het totaal aantal dagen te krijgen, alleen nu nog met een tijdsperiode:
Iemand een suggestie of iemand die me in de goede richting kan sturen?
Ik werk met een al bestaande database waar ik niks aan mag/kan passen, hoe onlogisch de dingen misschien zijn.
Er is een availability tabel (waarin tijdsperiodes staan wanneer een object niet beschikbaar is, misleidende tabelnaam dus!) met de volgende velden:
Tabel availability
code:
1
2
3
| object_id (#) begin_date (YYYY-MM-DD) end_date (YYYY-MM-DD) |
Een concreet voorbeeld van wat ik wil:
query: geef mij het aantal dagen dat 1 (object_id) niet beschikbaar is tussen 2007-02-15 en 2007-03-20
met het volgende records in de tabel availability:
object_id: 1 | begin_date: 2007-01-25 | end_date: 2007-02-25 (10 dagen)
object_id: 1 | begin_date: 2007-02-26 | end_date: 2007-02-28 (2 dagen)
object_id: 1 | begin_date: 2007-03-19 | end_date: 2007-03-21 (2 dagen)
Dit zou dus 14 dagen moeten opleveren.
Een periode kan er dus gedeeltelijk of geheel in vallen. Als de opgegeven tijdsperiode er gedeeltelijk in valt dan moeten ook alleen maar de dagen worden opgeteld die er in vallen, als de opgegeven tijdsperiode er geheel in valt dan moeten alle dagen worden opgeteld.
Het is me wel al gelukt om het totaal aantal dagen te krijgen, alleen nu nog met een tijdsperiode:
code:
1
2
3
4
| SELECT objects.object_id , SUM(DATEDIFF(availability.end_date, availability.start_date)) AS aantal_dagen FROM objects LEFT JOIN availability ON objects.object_id = availability.object_id GROUP BY object_id |
Iemand een suggestie of iemand die me in de goede richting kan sturen?