我们有很多这样的老选择:
SELECT
tm."ID",tm."R_PERSONES",tm."R_DATASOURCE", ,tm."MATCHCODE",
d.NAME AS DATASOURCE,
p.PDID
FROM TABLE_MAPPINGS tm,
PERSONES p,
DATASOURCES d,
(select ID
from TABLE_MAPPINGS
where (R_PERSONES, MATCHCODE)
in (select
R_PERSONES, MATCHCODE
from TABLE_MAPPINGS
where
id in (select max(id)
from TABLE_MAPPINGS
group by MATCHCODE)
)
) tm2
WHERE tm.R_PERSONES = p.ID
AND tm.R_DATASOURCE=d.ID
and tm2.id = tm.id;
这些表很大,查询需要很长时间,如何重建?
谢谢你
2条答案
按热度按时间2mbi3lxu1#
您只能使用以下语句查询表一次(未经测试,因为您没有提供创建表语句或示例数据的最小示例):
首先使用
RANK
解析函数找到最大值ID
,然后使用COUNT
解析函数中的条件聚集找到所有相关的r_persones, matchcode
对。RANK
或DENSE_RANK
分析函数来匹配最大值,因为它可以在每个分区中匹配多行;而ROW_NUMBER
只会将每个分区的一行放在第一位。*368yc8dk2#
您正在查询
table_mappings
3次;只做一次怎么样?