我有一个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
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以自行加入表格,然后从上一个日期的数据中减去。
看起来您在测试数据和结果中有拼写错误,日期应该是描述中所述的增量,但它有重复。
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 |