基于日期的mysql酒店客房总费用查询

m0rkklqb  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(246)

我需要查询一个小的酒店预订系统,我需要一个查询,以获得一个特定的日期和总费用的房间可用的帮助。
表如下所示:

+--------+------------+-------+--------+-------+------------------+
| RoomId | Date       | ResID |  Rate  | Tax   | DailyCleaningFee |
+--------+------------+-------+--------+-------+------------------+
|    1   | 2019-01-01 |   0   | 100    | 0.130 |    30            |
+--------+------------+-------+--------+-------+------------------+

resid决定是否在特定日期预订房间。0是可用的房间。我想查询2晚的所有客房的具体美食,它还应返回房间的总价格,包括清洁费和税费,结果如下表所示:

+---------+------------+
| RoomId  | TotalRate |
+-------- +------------+

如果我想查询2019-01-02和2019-01-03两个晚上的表,还应该排除tax为空和/或rate设置为0的记录。我的查询是什么样的?
真的很感谢我能得到的任何帮助。谢谢您!
edit:我在表的一个示例中添加了db fiddle链接。

j1dl9f46

j1dl9f461#

你的问题缺少准确回答的信息。但是我想我可以帮助你理解你的查询应该是什么样的,以得到预期的结果。见下文。

SELECT DISTINCT
   t1.RoomId AS RoomId, 
   (((t1.Rate + t1.DailyCleaningFee) * (1.0 + t1.Tax)) + ((t2.Rate + t2.DailyCleaningFee) * (1.0 + t2.Tax))) AS TotalRate  -- total rate has been the sum of each day rate + tax
FROM (
    SELECT h.*
    FROM `Hotel` h
    WHERE h.Date = '2018-12-02'   -- your first date goes here
    AND h.ResID = 0 AND h.Tax IS NOT NULL AND h.Rate > 0
) t1
INNER JOIN (
    SELECT h.*
    FROM `Hotel` h
    WHERE h.Date = '2018-12-03'  -- your second date goes here
    AND h.ResID = 0 AND h.Tax IS NOT NULL AND h.Rate > 0
) t2 ON t1.RoomId = t2.RoomId

这是可行的,因为对于您要搜索的每个日期(这里您提到了两天),您需要有一个内部查询,然后您需要通过 RoomId 收集所有提供日期的可用房间。之后,只有你才能计算出最终的利率。
您可能需要修改您没有明确提及的计税公式。
编辑:(2018-12-01)
上述查询仅在两天内显式有效。
要计算任意连续天数的总费率,可以使用以下查询。

SELECT
    t1.RoomId AS RoomId,
    ROUND(SUM(t1.DailyRate), 2) AS TotalRate
FROM (
    SELECT
        h.RoomId,
        ((h.Rate + h.DailyCleaningFee) * (1.0 + h.Tax)) AS DailyRate
    FROM Hotel h
    WHERE
        h.ResID = 0 
        AND h.Tax IS NOT NULL 
        AND h.Rate > 0
        AND h.Date >= '2018-12-02' AND h.Date <= '2018-12-04'
) t1
GROUP BY
    t1.RoomId
HAVING
    COUNT(*) >= DATEDIFF('2018-12-04', '2018-12-02') + 1;

请注意,日期包含在两个边界中。用日期参数替换硬编码日期。在 HAVING 我们检查一个房间是否有连续的可用天数,并且只过滤这些天数。
根据@strawberry的说法,在给定的表格中存储房间费用可能不是一种有效的方法。您可能需要稍微更改模式以使其获得更高的性能。

相关问题