Return 具有复杂 where 条件的查询

Return query with complex where condition

我有一个table这样的

table allotment

allotment_id | date | room_id | is_closed
-----------------------------------------
1 | 2017-01-28 | 21 | 0
2 | 2017-01-29 | 21 | 1
3 | 2017-01-30 | 21 | 0
4 | 2017-01-31 | 21 | 0
5 | 2017-01-28 | 32 | 0
6 | 2017-01-29 | 32 | 0
7 | 2017-01-30 | 32 | 0
8 | 2017-01-31 | 32 | 0

我正在尝试这样查询:

SELECT *
FROM allotment
WHERE date BETWEEN '2017-01-28' AND DATE_SUB('2017-01-31', INTERVAL 1 DAY)
AND is_closed = 0
AND date >= '2017-01-28' AND l.`date` <= DATE_SUB('2017-01-31', INTERVAL 1 DAY) AND allotment_id NOT IN (select allotment_id FROM allotment WHERE is_closed = 1 AND date >= '2017-01-28' AND date <= '2017-01-31')

如您所见,我 select 从日期 2017-01-28 到 2017-01-31 并且在 table 上有两个房间 ID,在 room_id 21 日期 2017-01-29 is_closed 是 1.

我想要的是 return 只是 room_id 32 因为在 room_id 21 中我 select 编辑的日期范围是 is_closed.

中的值 1

我已经尝试过我的查询,但它不起作用。我怎么能那样做。

谢谢。

按房间分组,只选择那些 is_closed 标志为零的房间

SELECT room_id
FROM allotment
WHERE date >= '2017-01-28' 
  AND date <= '2017-01-31'
group by room_id
having sum(is_closed = 1) = 0

您在何处进行子查询allotment_id。取而代之的是你必须带房间号

SELECT *
FROM allotment
WHERE date BETWEEN '2017-01-28' AND DATE_SUB('2017-01-31', INTERVAL 1 DAY)
AND is_closed = 0 and room_id not in (select room_id FROM allotment WHERE is_closed = 1 AND date >= '2017-01-28' AND date <= '2017-01-31')