子查询上的selfjoin然后具有相同的表性能

问题描述

我有一个表T(约1.2亿行):

ID  CAT GRP SUB SEQ CO  Score
1   04S 72  200 60  047 0
1   04S 72  200 65  047 7
1   04S 72  200 69  050 0
1   04S 72  200 70  050 1
1   04S 72  200 71  050 2
1   04S 72  200 72  050 0
1   04S 72  200 83  053 9
1   04S 72  200 84  053 7
1   04S 72  200 85  053 9
1   04S 72  200 86  053 1

我需要选择Score最大的那些记录才能在ID,CAT,GRP,SUB,CO上进行分组。 因此,在这种情况下,结果将是(选择后不应显示括号中的数据):

ID  CAT GRP SUB SEQ (CO Score)
1   04S 72  200 65  (047    7)
1   04S 72  200 71  (050    2)
1   04S 72  200 83  (053    9)
1   04S 72  200 85  (053    9)

这是我的查询,但需要花费多个小时才能完成:

SELECT DISTINCT
        T.ID,T.CAT,T.GRP,T.SUB,T.SEQ
FROM T
INNER JOIN (
            SELECT
                   ID,CO,MAX(Score) AS Score
            FROM T
            GROUP BY ID,POS
           ) AS T1
    ON T.ID = T1.ID AND T.CAT = T1.CAT AND T.GRP = T1.GRP AND T.SUB = T1.SUB AND T.CO = T1.CO AND T.Score = T1.Score;

是否有更好的方式编写性能查询?

谢谢:)

解决方法

尝试一下:

SELECT TOP 1 WITH TIES ID,CAT,GRP,SUB,SEQ,CO,Score
FROM data_table
ORDER BY ROW_NUMBER() OVER (PARTITION BY ID,CO ORDER BY Score DESC)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...