我有一個包含事務的表。有兩種類型的交易:「正常條目」(類型= 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答案也會被接受!
遊標在SAS SQL中可用。 – Reeza
您能否假設您提交的訂單將存在或者是否需要考慮解決方案? – Reeza
是的,行順序可以推定爲。感謝光標事物,我不知道。 –