假设你有一个酒店数据库。每家酒店在数据库中创建多个价格,每个价格都有一个 from_date
以及 to_date
. 利率保证永不重叠。
在每种价格中,酒店经理可以设定该期间的最低入住率。例如,从12月1日到1月30日,最少入住10晚。
现在一个旅行者输入他的日期,例如12月25日到1月1日。在这种情况下,结果中不应返回此酒店,因为12月1日到1月30日的费率规定只欢迎入住至少10晚。
我想不出一种方法来查询这个数据库(使用sql或elasticsearch,这是我们目前的搜索引擎),以避免返回在该日期范围内最低入住率较高的酒店。
在sql中,我将探索一条路径 joining
hotels表和rates表,使用 WHERE
获得与旅行者期望的日期重叠的费率(可能使用algo (StartA <= EndB) and (EndA >= StartB)
),加上一个聚合函数,如 MAX()
达到最大值 min_stay
最后是 HAVING
若要指定它,则应大于旅行者提供的范围内存在的夜数。
但即使是这条路对我来说也是晦涩难懂的,因为当我加入一个表时,我会排除没有配置任何费率的酒店,这不是我想要的;也许是左外连接?如何将其转换为elasticsearch应该是一个更大的挑战(可能使用类似于本文所描述的bucket聚合的东西)https://stackoverflow.com/a/46953947/1290457)
1条答案
按热度按时间cu6pst1q1#
下面是查询的大致轮廓。它假设利率的结束日期是包含在内的。
它检查每个酒店,不存在与给定日期范围相交且要求最小入住时间大于夜数的价格。