从组,row_number,排名中选择SQL TOP N行不起作用

阿拜

在SQL Server中,我有一个包含以下字段的表。我想从每个组中获取前N行。我已经尝试过使用Rank()和Row_number()进行以下SQL查询,但是等级和行号不是按顺序排列的,因此无法限制行数。

这是我尝试过的SQL查询,如您在结果中所见,等级列没有序号,因此“ where”子句不适用于每个组的前3行。

用ROW_NUMBER(),DENSE_RANK()观察到相似的结果

  SELECT Rs.RunID,rs.SiteCode,procedure_name,rs.total_cpu_time, rank
FROM (
    SELECT RunID, SiteCode,total_cpu_time, procedure_name, rank() 
      over (Partition BY sitecode
            ORDER BY total_cpu_time desc ) AS Rank

    FROM TopProcs 
 --   ) rs WHERE Rank between 1 and 15 and RunID = 1 and SiteCode in ('CAS', 'P01')
    ) rs WHERE  RunID = 1 and SiteCode in ('CAS', 'P01')
    order by SiteCode`

这是输出,

RunID   SiteCode    procedure_name           total_cpu_time rank
1        CAS        spDRSActivation            117039139161 1
1        CAS        spDRSSendChangesForGroup    155827022   2
1        CAS        spDRSMsgBuilderActivation   153595640   3
1        CAS        spGetChangeNotifications    360607      30
1        CAS        spDRSSendSyncComplete       100169      65
1        CAS        spSendRcmServiceBrokerMessage   88270       67
1        CAS        spLogEntry                  53466       78
1        P01        spDRSMsgBuilderActivation   62843590384 9
1        P01        spDRSSendChangesForGroup    62746448352 10
1        P01        spDrsSummarizeSendHistory   54443397908 13
1        P01        CH_SummarizePolicyRequests  35371363957 18
1        P01        spProcessDCMComplianceMsg   29790879064 25
1        P01        spUpdateComplianceDetails   22106121907 26
马赫什

我假设您想按顺序获取分区TOP N结果如果只需要在内部查询中进行过滤,则可以将子句放在内部,以过滤数据后词。sitecodetotal_cpu_timeWhere

您可以使用Row_Number()代替rank()

SELECT rs.RunID,rs.SiteCode,rs.procedure_name,rs.total_cpu_time, rn
FROM (
       SELECT 
            RunID,  
            SiteCode,
            total_cpu_time, 
            procedure_name, 
            Row_Number() OVER (PARTITION BY SiteCode ORDER BY total_cpu_time DESC) AS rn
        FROM TopProcs 
        WHERE
           RunID = 1 
           AND SiteCode IN('CAS', 'P01')
    ) rs 
WHERE  
    rs.rn < 4
ORDER BY SiteCode

这将返回每个SiteCode的前3行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章