微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

复杂的TSQL查询前n个和Group by组合

如何解决复杂的TSQL查询前n个和Group by组合

| 我非常了解Tsql,但是我确实在这里碰壁。 我正在对某些Agent进行一些统计,并且使用group by来构建数据,如下所示:
    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,1) * 4 
        WHEN [No 14] = 3 then CONVERT(int,1) * 3 
        WHEN [No 14] = 4 then CONVERT(int,1) * 2 
        WHEN [No 14] = 5 then CONVERT(int,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 desc将每个座席的前20行放入查询中? 如果只有15行,则应基于这些行。     

解决方法

        您可以使用
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 ...
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。