计算天数之间的收入Oracle SQL

时间:2017-06-20 08:09:51

标签: sql oracle

我需要一个查询来计算一个月内每个星期四的酒店收入,但必须计算星期五和周四的最后几周之间所有期间的总和。

第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|

现在名单继续......

有什么建议吗?

谢谢

1 个答案:

答案 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