2014-09-30 90 views
2

我有數據寫入DB作爲每日快照。這些表格是SQL - 從每日快照獲取時間範圍的數據

DECISION_REFUSAL_REASON_STATS 
    -REASON_STTS_ID (fk_reasons_stats_id) 
    -PERIOD_ID (fk_period_id) 
    -REFUSAL_REASON_CODE 
    -REFUSAL_COUNT 

REASONS_STATS 
    -ID 
    -REF_MANUFACTURER 
    -REF_PRODUCT_CODE 
    -REF_WARRANTY_CODE 

PERIOD 
    -ID 
    -EXACT_DATE 

期間表更復雜,但對於問題的目的應該是足夠的。現在,它只是一個日期(yyyy-mm-dd)與在DECISION_REFUSAL_REASON_STATS中用作外鍵的id的關聯。

此表格(DECISION_REFUSAL_REASON_STATS)包含當前情況的每日快照,以這種方式構建,從PERIOD表中每天存儲關於拒絕原因的統計數據。現在,在特定的一天,可能有多個拒絕原因,並且只有那些被更新的原因被存儲。

day 1 (as first day of the whole period) 
------- 
bad writing: 2 
incorrect receipt: 1 

day 2 
------- 
bad writing: 3 
to late: 1 

day 3 
------- 
to late: 3 
incorrect receipt: 2 

===================== 

我需要生成第2天和第3之間的統計信息,因此預期的結果將是:

Result (day 3 - day 1 stats) 
------- 
to late: 3 
incorrect receipt: 2 - 1 = 1 
bad writing: 3 - 2 = 1 

正如你所看到的,它不只是一個減去一天的事來自第3天數據的1個數據。我需要考慮到一天的失蹤原因3.

我設法讓統計期間

SELECT 
    RS.REF_WARRANTY_CODE 
, DRRS_END.REFUSAL_REASON_CODE 
, MAX(NVL(DRRS_END.REFUSAL_COUNT, 0)) 
FROM 
    DECISION_REFUSAL_REASON_STATS DRRS_END 
    JOIN REASON_STATS RS ON (DRRS_END.REASON_STTS_ID = RS.ID) 
    LEFT JOIN PERIOD P_END ON (DRRS_END.PERIOD_ID = P_END.ID) 
WHERE 
    P_END.EXACT_DATE <= TO_DATE('2013-12-31', 'YYYY-MM-DD') 
GROUP BY 
    CS.REF_GUARANTEES_CODE 
, CRRS_END.REFUSAL_REASON_CODE 
ORDER BY 
    CS.REF_GUARANTEES_CODE 

的最後一天,但我堅持就如何進一步取得進展,並減去「期間開始'的數據,所以我的問題是 - 我怎樣才能達到我需要的結果?

回答

0

我沒有看到你減去「遲到」,因爲你做了其他原因,但我會認爲這是一個疏忽,並且你確實想這樣做。據我瞭解,你真正想要的是:「到今天爲止,最後的原因是什麼?」 (我可以修改它以適應你的結果,說:「今天保留,加上今天和開始日之間的任何變化,加上前一天和開始日之間的任何變化。」)我認爲你需要一個複合查詢來得到這個,如:(你沒有提到版本,所以我要用10g)(列名縮寫):

SELECT y.refusal_code, y.refusal_count - nvl(x.refusal_count,0)change_from_today , z.refusal_code,z.refusal_count - NVL(x.refusal_count,0)change_from_prev_day_not_today 從 (SELECT * FROM統計其中period_id =(從選擇期間表當前週期)Y 左外連接 (SELECT * FROM統計其中period_id =(從期間表中選擇開始期間)x 左外連接 (SELECT * FROM統計其中不存在(來自統計選擇1其中週期=電流) 和period_id =(選擇從統計最大(週期),其中週期<當前期間)z的

注:Y查詢給出了本期比較的原因 x查詢給出了從起始階段的原因與 的比較z查詢給出了本期之前的原因 - 無論它們是否處於起始階段。