2016-11-07 60 views
0

背景不同日期之間的總交易

我有一個包含事務的表。有兩種類型的交易:「正常條目」(類型= N)和「修復」條目(類型= F)。每筆交易都有一個客戶ID,一個日期,一個類型代碼和一個EUR金額。一些示例數據如下:

| 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

遊標在SAS SQL中可用。 – Reeza

+0

您能否假設您提交的訂單將存在或者是否需要考慮解決方案? – Reeza

+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步驟分組進行總結。

+0

您對同一天的多次購物提出了非常好的觀點。看起來這是可能的,但是關於這些數據的實際使用情況,如果將同一天的N次交易彙總在一起或不彙總(也就是說,我可以同時接受這兩種備選方案),這並不會產生影響。 –

+0

這會將每次購物分組到自己的組中。 – Reeza

+0

你在這裏有什麼ID?它只是client_ID還是你的意思是client_ID和日期? –