【发布时间】:2020-08-12 07:46:50
【问题描述】:
我有一个表 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,
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;
有没有更好的方法来编写查询性能?
谢谢你:)
【问题讨论】:
标签: sql tsql sql-server-2019