我需要查看酒店可用的酒店和房间数量一段时间(start_date和end_date。
我有一个表测试(id,date,qty,hotel_id)。我需要访问所有酒店ID,其中包含一些数量条件(例如,数量> 2)和两个日期之间的日期(例如:测试表的日期字段的日期值应大于'2013-05-06 '和结束日期小于'2013-05-10')。
我尝试了这个查询:
select hotel_id
from test
where qty>2
and date between '2013-05-06' and '2013-05-10';
但是,另一个条件是在给定日期之间必须有所有日期。即日期字段应包含所有日期日期值:'2013-05-06','2013-05-07','2013-05-08','2013-05-09','2013-05-10' 。如果缺少上述任何日期,则应返回空结果集。如果所有日期都可以使用qty> 2(let),那么它应该返回hotel_ids列表。
如何在单个MySQL查询中完成?
答案 0 :(得分:0)
尝试
SELECT `hotel_id`
FROM test
WHERE `date` BETWEEN '2013-05-06' AND '2013-05-10'
AND `qty` >= 2
GROUP BY `hotel_id`
HAVING COUNT(*) = (DATEDIFF('2013-05-10', '2013-05-06') + 1)
<强> SQLFiddle 强>