我需要一个查询来计算一个月内每个星期四的酒店收入,但必须计算星期五和周四的最后几周之间所有期间的总和。
第1周星期五 - >周四总收入 第2周周五 - >周四总收入 等等..
为了解释它尽可能简单,我使用表格保留来跟踪登记和退房日期,客人数量和房间类型,它们与ROOM_PRICES表格一起计算价格。如何计算SUM不是问题,但要在几天之间得到这个跨度。
预订(reservation_ID,reservation_date,room_number,guest_id,number_of_guests,room_type,check_out_date)
ROOM_PRICE(room_type,price)
预期产出是两列,期间和总收入。
总收入是在酒店度过的所有客人的所有款项之和,周五至周四的一周内离开,无论他们是否在酒店住了两周,三周
Period |Total Income
|-------------------------------------|
|05.May.2017-11.May.2017 | 20000|
|-------------------------------------|
|12.May.2017-18.May.2017 | 30000|
|-------------------------------------|
|19.May.2017-25.May.2017 | 12000|
现在名单继续......
有什么建议吗?
谢谢
答案 0 :(得分:0)
Oracle安装程序:
CREATE TABLE ROOM_PRICES(
hotel_id INTEGER,
day DATE CHECK ( day = TRUNC( day ) ),
price NUMBER(8,2),
CONSTRAINT room_prices__hotel_id__day__pk PRIMARY KEY ( hotel_id, day )
);
CREATE TABLE RESERVATIONS(
hotel_id INTEGER,
check_in DATE CHECK ( check_in = TRUNC( check_in ) ),
check_out DATE CHECK ( check_out = TRUNC( check_out ) ),
customer_id INTEGER
);
<强>查询强>:
从日期减去4(所以星期五映射到星期一),然后截断到iso-week(在本周开始时舍入到星期一)然后再添加4天并再添加6天以获得周四:
SELECT TRUNC( day - 4, 'IW' ) + 10 AS Thursday_of_week,
r.hotel_id,
SUM( price ) AS
FROM room_prices p
INNER JOIN reservations r
ON ( r.hotel_id = p.hotel_id
AND p.day >= r.check_in
AND p.day < r.check_out )
GROUP BY
r.hotel_id,
TRUNC( day - 4, 'IW' ) + 10