这是我的测试集:
master_ref ref value
56279276 56279325 FRAME ASSEMBLY1
56279276 384062724 FRAME ASSEMBLY2
56279276 443450775 FRAME ASSEMBLY3
我想根据给定master_ref的最高引用检索值字段。
这是我尝试过的,只是返回所有内容:
select first_value(value) over (partition by ida3masterreference order by ida3a4 desc) value, ida3masterreference, ida3a4 from sts_epm_title1;
我预计只会得到一个结果:
master_ref ref value
56279276 443450775 FRAME ASSEMBLY3
但它仍然返回所有 3 个结果。 我做错了什么? 谢谢!
first_value()
是一个分析函数,因此它不会减少行数。 您显然想要一个聚合函数,因此请使用keep
语法:
select max(value) keep (dense_rank first order by ida3a4 desc) as value,
ida3masterreference, max(ida3a4) as ida3a4
from sts_epm_title1
group by ida3masterreference
您可以使用
ROW_NUMBER/RANK
:
WITH cte AS (
select row_number() over (partition by ida3masterreference
order by ida3a4 desc) AS rn, t.*
from sts_epm_title1 t
)
SELECT *
FROM cte
WHERE rn = 1;