我有数据写入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
的最后一天,但我坚持就如何进一步取得进展,并减去“期间开始'的数据,所以我的问题是 - 我怎样才能达到我需要的结果?