2015-09-01 47 views
1

我們這是什麼,按日期和時間排序表:分區由特定行

date  | time  | amount | type 
-----------+-------------+--------+------- 
11/09/2014 | 11:13:03 AM | 1  | USE 
11/09/2014 | 11:14:03 AM | 2  | USE 
11/09/2014 | 12:13:03 AM | 10  | BUY 
11/09/2014 | 12:15:03 AM | 1  | USE 
11/09/2014 | 12:17:03 AM | 3  | USE 
11/09/2014 | 12:18:03 AM | 1  | USE 
11/09/2014 | 12:19:03 AM | 4  | USE 
11/09/2014 | 13:13:03 AM | 15  | BUY 
11/09/2014 | 14:13:03 AM | 1  | USE 

我們想建立每個團購交易之間的事務的使用越來越多的總和。即我們要拿出像這樣的表:

date  | time  | amount | type 
-----------+-------------+--------+------- 
11/09/2014 | 11:13:03 AM | 1  | USE 
11/09/2014 | 11:14:03 AM | 3  | USE 
11/09/2014 | 12:13:03 AM | 10  | BUY 
11/09/2014 | 12:15:03 AM | 1  | USE 
11/09/2014 | 12:17:03 AM | 4  | USE 
11/09/2014 | 12:18:03 AM | 5  | USE 
11/09/2014 | 12:19:03 AM | 9  | USE 
11/09/2014 | 13:13:03 AM | 15  | BUY 
11/09/2014 | 14:13:03 AM | 1  | USE 

你看到,在每個使用交易額舊值的總和,並在此前USE交易價值。並且在每交易完成之後重置買入交易。

通過分區購買/使用只創建兩個分區,因此它們的總和不是我們想要的。我們希望在每個買入交易分區。

爲了解決這個問題,我花了一天的時間,我想問一下在SQL中如何做到這一點,甚至可能嗎?我們正在使用SAP HANA,以防萬一。

+0

這是可能的SQL。但是,SAP Hana既不支持CTE也不支持窗口功能,因此在該方言中使用起來要困難得多。 –

+1

您可能指的是早期版本。 Windows功能[現在可能](http://help.sap.com/saphelp_hanaplatform/helpdata/en/20/a353327519101495dfd0a87060a0d3/content.htm)。你能否詳細說明一下? –

回答

0

您需要確定以「USE」結尾的組。一種方法是進行「USE」值的累加反轉和。然後做一個累積的總和,分成這個組。

我沒有訪問SAP HANA,但這是標準的SQL:

select t.*, 
     sum(amount) over (partition by grp order by date, time) as cume_amount 
from (select t.*, 
      sum(case when type = 'BUY' then 1 else 0 end) over (order by date desc, time desc) as grp 
     from table t 
    ) t