Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 子查询上的selfjoin在相同的表性能上_Sql_Tsql_Sql Server 2019 - Fatal编程技术网

Sql 子查询上的selfjoin在相同的表性能上

Sql 子查询上的selfjoin在相同的表性能上,sql,tsql,sql-server-2019,Sql,Tsql,Sql Server 2019,我有一个表T(约1.2亿行): 我需要选择那些得分最大的记录,以便对ID、CAT、GRP、SUB、CO进行分组。 因此,在这种情况下,结果将是(括号中的数据不应显示在选择之后): 这是我的查询,但需要几个小时才能完成: SELECT DISTINCT T.ID, T.CAT, T.GRP, T.SUB, T.SEQ FROM T INNER JOIN ( SELECT

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

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

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

SELECT DISTINCT
        T.ID,
        T.CAT,
        T.GRP,
        T.SUB,
        T.SEQ
FROM T
INNER JOIN (
            SELECT
                   ID,
                   CAT,
                   GRP,
                   SUB,
                   CO,
                   MAX(Score) AS Score
            FROM T
            GROUP BY ID,CAT,GRP,SUB,CO,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, CAT, GRP, SUB, CO ORDER BY Score DESC)
试试这个:

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