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 に答える