如何根据累积数据计算日期特定数据

时间:2018-01-02 13:14:28

标签: oracle

我有一个Oracle表,其中包含两个帐户的值,每个记录都有Date字段。一周的第一天将只有与第1天相关的数据,但是当我们在一周内看到Day2的数据时,它已经累积了数据。因此,我们需要从前一天的数据中减去Day2数据,以计算第2天的确切数据。第3天的相似方法。第7天。

请在SQL查询中建议最佳方法来处理此要求。我很抱歉打扰你。我是SQL的新手。非常感谢您的宝贵意见。例如,下面给出了6个带标题的列

>>> 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9
362880

因此,假设2017年12月31日是一周的第一天,数据记录将仅显示当天的数据1.当我们继续到本周的第2天,即2018年1月1日时,它已累积数据包括第1天和第2天。因此,我们需要从Day1数据中减去Day2数据,以计算数据2的精确数据.1500-1200 = 300是第2天的确切值。第3天,第4天,第5天,第6天和第7天我们需要遵循相似的方法。

预期输出见下文

Center          Entity      Bonus   Year    Period      Incentive
MANUFACTURING   NEW YORK    1200    FY18    31-12-2017  120
MANUFACTURING   NEW YORK    1500    FY18    01-01-2018  250
MANUFACTURING   NEW YORK    1800    FY18    01-01-2018  320

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以使用简单的jQuery函数LAG()

NVL()

DEMO

答案 1 :(得分:0)

您可以自行加入表格,然后从上一个日期的数据中减去。

看起来您在测试数据和结果中有拼写错误,日期应该是描述中所述的增量,但它有重复。

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE t
    (Center varchar2(13), Entity varchar2(8), Bonus int, Year varchar2(4), Period DATE, Incentive int)
;

INSERT INTO t (Center, Entity, Bonus, Year, Period, Incentive)
         VALUES ('MANUFACTURING', 'NEW YORK', 1200, 'FY18', DATE '2017-12-31', 120);
INSERT INTO t (Center, Entity, Bonus, Year, Period, Incentive)
         VALUES ('MANUFACTURING', 'NEW YORK', 1500, 'FY18', DATE '2018-01-01', 250);
INSERT INTO t (Center, Entity, Bonus, Year, Period, Incentive)
         VALUES ('MANUFACTURING', 'NEW YORK', 1800, 'FY18', DATE '2018-01-02', 320);
;

<强>查询

select t1.center, 
  t1.entity, 
  t1.bonus - nvl (t2.bonus,0) bonus, 
  t1.year, 
  t1.period, 
  t1.incentive - nvl(t2.incentive,0) incentive 
from t t1 
left outer join t t2
on t1.period = t2.period + 1
order by t1.period

<强> Results

|        CENTER |   ENTITY | BONUS | YEAR |               PERIOD | INCENTIVE |
|---------------|----------|-------|------|----------------------|-----------|
| MANUFACTURING | NEW YORK |  1200 | FY18 | 2017-12-31T00:00:00Z |       120 |
| MANUFACTURING | NEW YORK |   300 | FY18 | 2018-01-01T00:00:00Z |       130 |
| MANUFACTURING | NEW YORK |   300 | FY18 | 2018-01-02T00:00:00Z |        70 |