You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选与指定日期范围完全匹配的行?SQL查询问题求助

问题解决:获取日期范围完全可用的酒店房间

原查询的问题在于:它只筛选出了目标日期范围内至少有一天可用的房间,但没有验证这些房间是否在整个日期范围的每一天都处于可用状态,因此会混入不符合要求的结果。

以下是两种可行的修正方案:

方案一:通过统计可用天数匹配日期范围

SELECT 
    r.hotel_id, 
    JSON_ARRAYAGG(rs.date) AS availableDate
FROM rooms r
INNER JOIN room_status rs ON r.id = rs.room_id
WHERE rs.date BETWEEN '2023-03-08' AND '2023-03-13' 
  AND rs.is_available = true
GROUP BY r.id, r.hotel_id
-- 确保可用天数等于日期范围总天数(含首尾共6天)
HAVING COUNT(DISTINCT rs.date) = DATEDIFF('2023-03-13', '2023-03-08') + 1;

逻辑说明:通过COUNT(DISTINCT rs.date)统计房间在目标区间内的可用天数,用DATEDIFF +1计算出区间总天数,只有两者相等时,才能证明该房间在这段时间的每一天都可用。

方案二:排除存在不可用日期的房间

SELECT 
    r.hotel_id, 
    JSON_ARRAYAGG(rs.date) AS availableDate
FROM rooms r
INNER JOIN room_status rs ON r.id = rs.room_id
WHERE rs.date BETWEEN '2023-03-08' AND '2023-03-13' 
  AND rs.is_available = true
  -- 排除目标区间内有任何一天不可用的房间
  AND r.id NOT IN (
      SELECT room_id 
      FROM room_status 
      WHERE date BETWEEN '2023-03-08' AND '2023-03-13' 
        AND is_available = false
  )
GROUP BY r.id, r.hotel_id;

逻辑说明:先通过子查询找出所有在目标日期范围内存在不可用记录的房间ID,主查询直接排除这些房间,剩下的就是整个区间都保持可用的房间。

内容的提问来源于stack exchange,提问作者Jay Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:03:25