当前位置: 首页 > 面试题库 >

酒店预订价格SQL问题

辛可人
2023-03-14
问题内容

嗨,在阅读了StackOverflow上的其他问题后,我一直在尝试建立自己的系统来检查房间价格。

当预订日期中的房价没有重叠时,我的查询工作正常并产生正确的天数,但是当重叠时,我在第二行结果中得到了额外的一天。

例如,某人到达2011-04-14并离开2011-04-16(2天)。15日的费率从66更改为70,因此他应该以66的费率有1天,以70的费率有1天。

我尝试过没有TIMEDATE-只是DATE,但是发生了同样的事情。

询问

    SELECT rates.rate_id, rate_start_date, rate_end_date, rate_price, 
(DATEDIFF( IF (rate_end_date > '2011-04-16 14:00:00' , '2011-04-16 14:00:00', rate_end_date),
IF ( rate_start_date < '2011-04-14 12:00:00' , '2011-04-14 12:00:00' , rate_start_date )) +1 ) 
AS days FROM rates 
WHERE rate_start_date <= '2011-04-16 14:00:00' AND rate_end_date > '2011-04-14 12:00:00' 
ORDER BY rate_price ASC

费率表

rate_id rate     rate_start_date        rate_end_date
1       70      2011-04-15 00:00:00   2011-05-31 23:59:59
2       80      2011-06-01 00:00:00   2011-06-30 23:59:59
3      100      2011-07-01 00:00:00   2011-08-31 23:59:59
4       80      2011-09-01 00:00:00   2011-09-30 23:59:59
5       70      2011-10-01 00:00:00   2011-10-31 23:59:59
6       45      2011-11-01 00:00:00   2011-12-31 23:59:59
0       66      2011-01-01 00:00:00   2011-04-14 23:59:59

结果

rate_id  rate_start_date         rate_end_date       rate    days
0       2011-01-01 00:00:00    2011-04-14 23:59:59  66  1
1       2011-04-15 00:00:00    2011-05-31 23:59:59  70  2 <----this should be 1 day

我非常感谢任何帮助或解释,为什么我的查询为我提供了第二行结果的额外时间。

谢谢


问题答案:

谢谢您的回答,马丁给您提供了2行,但是没有几天…埃米利奥(Emilio)的回答让我开始思考如何设置费率。我将费率表更改为日期格式,而不是日期时间,并使rate_end_date与下一个rate_start_date在同一天。

0   66  2011-01-01  2011-04-15
1   70  2011-04-15  2011-06-01
2   80  2011-06-01  2011-07-01
3   100 2011-07-01  2011-09-01
4   80  2011-09-01  2011-10-01
5   70  2011-10-01  2011-11-01
6   45  2011-11-01  2012-01-01

然后放下+1并

SELECT rates.rate_id, rate_start_date, rate_end_date, rate_price, 
(DATEDIFF( IF (rate_end_date > '2011-04-16' , '2011-04-16', rate_end_date), 
IF ( rate_start_date < '2011-04-14' , '2011-04-14' , rate_start_date )) ) 
AS days FROM rates WHERE rate_start_date <= '2011-04-16' 
AND rate_end_date > '2011-04-14' 
ORDER BY rate_price ASC

生产的

rate_id   rate_start_date   rate_end_date   rate  days    
    0   2011-01-01  2011-04-15  66  1
    1   2011-04-15  2011-06-01  70  1

以及从4月1日到8日没有重叠率的查询:

SELECT rates.rate_id, rate_start_date, rate_end_date, rate_price, 
(DATEDIFF( IF (rate_end_date > '2011-04-08' , '2011-04-08', rate_end_date), 
IF ( rate_start_date < '2011-04-01' , '2011-04-01' , rate_start_date )) ) 
AS days FROM rates WHERE rate_start_date <= '2011-04-08' 
AND rate_end_date > '2011-04-01' 
ORDER BY rate_price ASC

产生:

rate_id   rate_start_date    rate_end_date   rate  days
    0     2011-01-01       2011-04-15     66    7

感谢agiain的帮助!



 类似资料:
  • 问题内容: 我有这张表来查询不同季节(高,低)季节的房间价格 如何获得不同天数和不同季节的5天总价.. 看这张表 这是我的命令(mysql)我想从 2013年4月7日* 到 2013年 11月7日获得10晚的总价格 * 添加 我写了这个命令,但是还是没用 错误:#1305-功能saudihot_saudihotels.strtodate不存在 问题答案: 这是查询: 注意,表达式要简单得多,现在星

  • 我是工作酒店预订工作流程。但我在酒店预订API上很挣扎。下面我一步一步地提到我所做的活动。请帮我解决这个问题。 OTA_HotelAvailrQ API: 请求正文:

  • 我有3张桌子,酒店和一张预订桌 Marc预订Croissaint酒店、Baguette酒店和Fromage酒店(全部预订) Anthony预订Croissaint酒店,Baguette酒店 巴斯蒂安没有预订酒店 我想找皮埃尔和马克,因为他们预订了所有的酒店,而不仅仅是一个,两个或一个都没有 注意:如果你可以不使用分析函数,那就更好了

  • 预估价格 说明 预估价格只是参考价格,最终支付费用,以实际产生费用为准 地址URL /v1/common/Estimate/priceCoupon 支持格式 {url}?k1=v1&k2=v2&k3=v3&... HTTP请求方式 GET 是否需要登录 是 关于登录授权,参见 如何登录授权 访问授权限制 暂无 请求参数 名称 类型 必选 描述 client_id string yes 申请应用时分

  • 1. 酒店方案 1.1. 核心能力模块 1.2. 功能列表 1.1. 核心能力模块 技能 API / 白板H5 智能家居品牌 1.2. 功能列表 功能/能力 功能描述 输出方式 品牌配置 获取品牌相关信息、绑定需要控制的品牌及同步设备 API/白板H5/若琪APP 空间隔离 可以在一个账号下创建多个独立空间(客房),一次同步 实现多个空间的独立控制 API/白板H5/若琪APP 房间管理 在空间中

  • 题目描述: 放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店(n>=k>0),并由低到高打印酒店的价格。 备注: 1)酒店价格数组A和小明的心理价位x均为整型数据;(0 < n,k,x < 10000) 2)优先选择价格最接近心理价位的酒店;若两家酒店和心理价位差价相同,则选择价格较低的酒店。(比如100元