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