2017-06-20 50 views
0

我需要一個查詢來計算一個月內每個星期四的酒店收入,但必須計算上週星期五和下週星期四之間的所有期間的總和。 1在幾天之間計算收入Oracle SQL

周星期五 - >週四收入共計 第2周星期五 - >週四的總收入 等..

解釋它儘可能的簡單,我用的是表預訂跟蹤辦理入住手續和退房日期,客人數量和房間類型,這是加入ROOM_PRICES表來計算價格..如何計算SUM不是問題,但要獲得這個天數之間的跨度是。

保留(reservation_ID,reservation_date,room_number,guest_id,NUMBER_OF_GUESTS,room_type,CHECK_OUT_DATE)

ROOM_PRICE(room_type,價格)

預期的輸出是兩列,週期和總收入。

總收入是誰在酒店週五和週四之間花費的時間在酒店留下了一個星期,不管他們花了兩,三週的客人支付的所有款項的總和

Period     |Total Income 
    |-------------------------------------| 
    |05.May.2017-11.May.2017 |  20000| 
    |-------------------------------------| 
    |12.May.2017-18.May.2017 |  30000| 
    |-------------------------------------| 
    |19.May.2017-25.May.2017 |  12000| 

現在名單繼續..

有什麼建議嗎?

謝謝

+3

請** [編輯] **您的問題,併爲相關表添加'create table'語句,一些示例數據和基於該數據的預期輸出。 [**格式化文本**](http://stackoverflow.com/help/formatting)請,[**沒有屏幕截圖**](http://meta.stackoverflow.com/questions/285551/why-may -i-不上傳圖像-的代碼上那麼當灰化-A-問題/ 285557#285557)。 ** [**]您的問題 - 請勿**在論壇中發佈代碼或其他信息。 –

+0

請提供'Reservations'和'Room_Prices'的表結構,以便更好地理解場景。沒有它,我無法得到您的要求的背景。 – Debabrata

回答

0

甲骨文設置

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周(週一到週一開始),然後再添加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