Sql 子查询上的selfjoin在相同的表性能上
我有一个表T(约1.2亿行): 我需要选择那些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
得分
最大的记录,以便对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)