私が仕事をすることができない一見単純なクエリ...
2 つのテーブルの部屋と空室状況
Room [id, title, beds]
Availability [room_id, date, bed_delta]
ルームには、利用可能なベッドの最大数が固定されています。可用性は、変更された期間Room.beds
(アップまたはダウン) を表します。
特定の部屋と特定の開始日と期間について、利用可能なベッドを合計するクエリを作成しようとしています。
例えば:
- ルーム1には通常2つのベッドがあります
- 1時間、1ベッドが取られます
- 期待される結果は 1
この日時範囲と重複する別の利用可能期間が追加され、ベッド数がさらに 1 減少した場合、予想される結果は 0 になります。
比較的単純なクエリのように感じます。
- LEFT OUTER JOIN room_id の空室状況への Room
- 日付による制約
- Room.beds を選択 - sum(Availability.bed_delta)
すなわち
SELECT r.beds - coalesce(sum(a.bed_delta), 0) as beds_free
FROM room r
LEFT OUTER JOIN availability a ON (r.id = a.room_id)
WHERE date = '2012-01-01 09:00:00+01:00'
AND r.id = 2
GROUP BY r.id;
このクエリは、一致する行が にある場合にのみ返されavailability
ます。私が期待したのは、id == 2 の部屋の 1 つの行でした。