我无法解决。我想每次数据仓库中的帐户发生更改时都会得到一条记录,但是我只收到一个记录。下表是我正在使用的示例。
Row Acct1 Acct2 Date Total_Reissued Reissue_Per_Day
1 A 1 1/1/2016 2 2
2 A 1 1/2/2016 3 1
3 A 1 1/3/2016 5 2
4 A 1 1/4/2016 6 1
1 B 3 1/1/2016 1 1
2 B 3 1/2/2016 2 1
1 B 4 1/1/2016 1 1
2 B 4 1/2/2016 2 1
重新发布的列是运行总计。对于2016年1月1日的帐户A,有2次重发,然后在2016年1月2日,有1次重发,总计3次。我的问题是计算每天的实际重发次数。
您可以使用该lag()
功能来回溯上一行;假设“上一个”是您看到的acct1 / acct2组合的最后日期,则可以执行以下操作:
select row_number() over (partition by acct1, acct2 order by dt) as row_num,
acct1, acct2, dt, total_reissued,
total_reissued - nvl(lag(total_reissued)
over (partition by acct1, acct2 order by dt), 0) as reissue_per_day
from your_table;
ROW_NUM A ACCT2 DT TOTAL_REISSUED REISSUE_PER_DAY
---------- - ---------- ---------- -------------- ---------------
1 A 1 2016-01-01 2 2
2 A 1 2016-01-02 3 1
3 A 1 2016-01-03 5 2
4 A 1 2016-01-04 6 1
1 B 3 2016-01-01 1 1
2 B 3 2016-01-02 2 1
1 B 4 2016-01-01 1 1
2 B 4 2016-01-02 2 1
我不确定您的“行”列是否确实存在,或者是否是必需的,或者仅仅是为了说明您的数据。无论如何,我已经生成了它,以备您需要时使用。
感兴趣的主要部分是:
lag(total_reissued) over (partition by acct1, acct2 order by dt)
查找前一个日期的值(dt
用作列名,因为date
它不是有效名称)。然后有一个nvl()
包装器,因此第一行看到的虚拟值为零,而不是null。然后从当前行的值中减去该值以获得差值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句