2012-07-20 66 views
1

我有這樣一個表,考慮我有大約500萬條記錄。如何計算交易數據

  Transaction id|Amount|CustomerId|date 
       1  | 100 | 20  |1/1/2012 
       2  | 230 | 30  |2/2/2012 
       3  | 320 | 20  |2/3/2012 
        etc... 

如何找到2012年每季度每位客戶最近5次交易的總金額?

輸出:季度|客戶ID |總金額

   1 | 20  | 40000 
      1 | 30  | 300000 
      2 ...etc... 

請寫一個有效的方法..

+0

你有什麼嘗試?你能提供更多的樣本輸入以及預期的輸出嗎?如果一個客戶一個季度只有2筆交易會怎樣? – Ghost 2012-07-20 16:11:52

回答

1

你應該張貼的ddl.But你可以嘗試像this.It應該工作..

with mycte as 
(
select customerid,datepart(qq,dt) as qtr,amount, 
row_number() over(partition by      
datepart (qq,dt),customerid order by dt desc,transaction id desc) as rn 
from table where dt >= '01/01/2012' 
) 
select qtr,customerid,sum(amount) as amt 
from mycte 
where rn <= 5 
group by qtr,customerid 

如果您希望別人爲您編寫高效的查詢,那麼您必須通過提供ddl,索引等和一些示例數據以及您使用的方法來做一些努力工作 直到現在。