172,027
社区成员




表结构如下,房间资料(ID主键,number代码,name名称),租赁合同表(id,房间id,租赁开始日期startdate,租赁结束日期enddate),一个房间可能有多个合同,对应不同起始日期,求每个房间在某个查询时间内的空置天数!
SELECT
r.ID AS RoomID,
r.number AS RoomNumber,
r.name AS RoomName,
(SELECT COUNT(DISTINCT date_range.date)
FROM generate_series('2023-01-01'::date, '2023-12-31'::date, '1 day'::interval) date_range(date)
LEFT JOIN lease_contract lc ON r.ID = lc.room_id
WHERE lc.startdate <= date_range.date AND lc.enddate >= date_range.date
AND date_range.date BETWEEN '2023-01-01' AND '2023-12-31') AS VacantDays
FROM room_data r;
generate_series 是一个用于生成日期范围的函数。
LEFT JOIN 用于获取每个房间的租赁情况。
COUNT(DISTINCT date_range.date) 用于计算在查询时间范围内未被租赁的日期数量。
替换 '2023-01-01' 和 '2023-12-31' 为您实际的查询时间范围。