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 笔交易的总金额?

输出:Quarter|Customerid|totalAmount

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

请写一个有效的方法..

4

1 回答 1

1

您应该发布 ddl。但是您可以尝试这样的事情。它应该可以工作..

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、索引等和一些示例数据以及您迄今为止使用的方法来做一些艰苦的工作。

于 2012-07-20T16:25:41.453 回答