2014-09-30 89 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查询给出了本期之前的原因 - 无论它们是否处于起始阶段。