2011-06-18 7 views
1

私はTSQLをかなりよく知っていますが、私はここで壁に間違いなくヒットしました。複雑なTSQLクエリ(トップnとグループ化を組み合わせて)

私はいくつかのエージェントの統計のいくつかを作っていますし、私はこのようなデータを構造化することにより、グループを使用します。

select 
    AgentID, 
    [No 14] as answer_option, 
    COUNT(*) as amount_of_answers, 
    CASE 
     WHEN [No 14] = 1 then CONVERT(int, COUNT(*), 1) * 5 
     WHEN [No 14] = 2 then CONVERT(int, COUNT(*), 1) * 4 
     WHEN [No 14] = 3 then CONVERT(int, COUNT(*), 1) * 3 
     WHEN [No 14] = 4 then CONVERT(int, COUNT(*), 1) * 2 
     WHEN [No 14] = 5 then CONVERT(int, COUNT(*), 1) * 1 
     END as combined_weight 
from #temptable 
where 
[No 14] <> '-' 
and AgentID <> '-1' 
group by AgentID, [No 14] 
order by AgentID, svar 

私は、データが最後に基づくべきであると言われたまでは今、これがすべての偉大な仕事をしていましたエージェントごとに20行の入力。エージェントの

最後の20行は次のように見つけることができます:

select TOP 20 * from #temptable where AgentID = X order by changedDate desc 

私は、クエリによって私のグループにChangedDateの降順に基づいて、エージェントあたりの上位20行を取得ので、私はこれらの2つのクエリを結合するにはどうすればよいです?

15行しかない場合は、これを基にしてください。

答えて

3

row_number()を使用して、エージェントごとに最後の20行を除外できます。変更:

from #temptable 

へ:

from (
     select row_number() over (partition by AgentID 
            order by ChangedDate desc) as rn 
     ,  * 
     from #temptable 
     ) as SubQueryAlias 
where rn <= 20 
     and ... 
+0

私はちょうど私が最後のクエリで私の質問に忘れてしまった、それは魔法のように動作し、いくつかのwhere句でそれを修正!どうもありがとう!! – MathiasH

関連する問題