不同日期之间的交易总和

时间:2016-11-07 06:24:06

标签: sql sas

背景

我有一个包含交易的表格。有两种类型的事务:“正常条目”(类型= N)和“修复”条目(类型= F)。每笔交易都有客户ID,日期,类型代码和欧元金额。一些示例数据如下:

| client_id |   date    | transaction_type | amount  |
|-----------|-----------|------------------|---------|
|       111 | 01jan2015 | N                |  1000.0 |
|       111 | 01jan2015 | F                |  -500.0 |
|       222 | 05mar2015 | N                |  2000.0 |
|       222 | 06mar2015 | F                |  -100.0 |
|       222 | 07mar2015 | F                |  -100.0 |
|       222 | 09mar2015 | N                |  1000.0 |
|       222 | 10mar2015 | N                |   400.0 |
|       222 | 15jun2015 | F                |  -200.0 |

修正条目是对登记处某人进行的正常交易的人工更正。它们可以在同一天或正常交易之后完成,但如果为同一客户输入新的正常交易,则所有该客户的连续修复都涉及新交易(直到输入另一个正常交易)。因此,实际上,所有修复程序仅“修复”该客户端的最新事务。

修正可以是正数或负数,正常交易只是正数。

所需的输出

我想要的是每个客户的一组“正常”交易,其金额由与该交易相关的所有修正更正。以下示例数据:

| client_id |   date    | amount |
|-----------|-----------|--------|
|       111 | 01jan2015 |  500.0 |
|       222 | 05mar2015 | 1800.0 |
|       222 | 07mar2015 | 1000.0 |
|       222 | 08mar2015 |  200.0 |

所以这是一个N类交易和所有连续F交易的总和,直到下一个N交易。

到目前为止我有什么

如果所有修复都发生在与原始交易相同的日期(通常就是这种情况),这很简单:

select client_id, date, sum(amount)
from transaction_table
group by client_id, date

但是,我在处理原始交易日期之后发生的修复时遇到问题,因为我只需要选择在下一次正常交易之前发生的修复(这需要申请每个正常交易)。

有关正在使用的产品的说明

我实际上正在使用SAS 9.4,但通过SAS的proc sql程序,我可以应用基本的SQL,这就是我更习惯使用的。没什么好看的(因此游标,CTE等都没有)。一个不错的SAS答案也将被接受!

1 个答案:

答案 0 :(得分:0)

创建一个每N设置的分组标志。 如果同一天有多次购买会怎样?

 Data want;
  Set have;
  By ID;
   Retain purchaseGroup;
  If transx = 'N' then purchaseGroup+1;
  If first.id then purchaseGroup=1;
 Run;

然后使用ID和PurchaseGroup的SQL步骤分组进行汇总。