我有一张这样的表,考虑我有大约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...
请写一个有效的方法..
答案 0 :(得分:1)
你应该发布ddl.But你可以尝试这样的事情。它应该工作..
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,索引等以及一些示例数据以及到目前为止使用的方法来做一些艰苦的工作。