Sql 通过检查postgres中给定范围内的每天来选择值

Sql 通过检查postgres中给定范围内的每天来选择值,sql,postgresql,Sql,Postgresql,我有一个表(prop_rate_info),其中存储了特定的日属性和可用性信息。 比如: 我将以整数形式给出可用房间的日期范围和值。 查询应搜索范围的每个日期(从给定范围开始), 如果每天都有一个属性的可用房间值,那么它将给出属性id,否则它将忽略一个属性 也就是说,如果我给出的日期范围为2018-07-20到2018-07-23,可用房间价值为2, 然后每天(20日、21日、22日、23日)检查酒店是否有2间可用房间, 如果全天都有可用的房间值,那么它将给出一个属性id 这样,它将提供所有属性

我有一个表(prop_rate_info),其中存储了特定的日属性和可用性信息。 比如:

我将以整数形式给出可用房间的日期范围和值。 查询应搜索范围的每个日期(从给定范围开始), 如果每天都有一个属性的可用房间值,那么它将给出属性id,否则它将忽略一个属性

也就是说,如果我给出的日期范围为2018-07-20到2018-07-23,可用房间价值为2, 然后每天(20日、21日、22日、23日)检查酒店是否有2间可用房间, 如果全天都有可用的房间值,那么它将给出一个属性id

这样,它将提供所有属性id

我尝试使用此查询:

select property_id from prop_rate_info
where DATE(check_in_date) BETWEEN '2018-07-20' AND '2018-07-23' 
and available_room >= 2
group by property_id;
这是给所有属性id,尽管对于给定的范围,表中并没有每天所有属性的rocord

根据上面给出的示例数据,这应该将属性id设置为3,因为它有全天的记录,而且它还有可用的房间,每天的房间数大于等于2


你能帮我一下吗?如何完成这个查询?

只需从结束日期到开始日期进行区分,然后使用聚合函数

    select property_id from prop_rate_info
    where DATE(check_in_date) BETWEEN '2018-07-20' AND '2018-07-23' 
    and available_room >= 2
    group by property_id
    having count(*)=DATE_PART('day', '2018-07-23 00:00:00'::timestamp - '2018-07-20 00:00:00'::timestamp)+1


编辑您的问题并提供示例数据和所需结果。谢谢@GordonLinoff,我用更多详细信息和示例数据更新了问题。请看一看。非常感谢@Zaynul Abedin Tuhin,它如预期般完美工作。
    select property_id from prop_rate_info
    where DATE(check_in_date) BETWEEN '2018-07-20' AND '2018-07-23' 
    and available_room >= 2
    group by property_id
    having count(*)=DATE_PART('day', '2018-07-23 00:00:00'::timestamp - '2018-07-20 00:00:00'::timestamp)+1
property_id
3