[英]Calculate income between days Oracle SQL
我需要一个查询来计算一个月中每个星期四的酒店收入,但是必须计算星期五最后一个星期至下一个星期四之间的所有时间的总和。
第1周星期五->星期四总收入第2周星期五->星期四总收入,依此类推。
为了尽可能简单地进行说明,我使用RESERVATIONS表跟踪入住和退房日期,客人数量和房型,并将其与ROOM_PRICES表结合起来以计算价格。.如何计算总和是不是问题,但是要确保几天之间的跨度是。
预订(reservation_ID,reservation_date,room_number,guest_id,guest_of_guests,room_type,check_out_date)
ROOM_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|
现在列表继续。
有什么建议么?
谢谢
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(因此星期五映射到星期一),然后截断到等周(在星期初四舍五入为星期一),然后再加上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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.