我正在oracle数据库上运行SQL查询。
SELECT DISTINCT flow_id , COMPOSITE_NAME FROM CUBE_INSTANCE where flow_id IN(200148,
200162);
我得到以下结果。
200162 ABCWS1
200148 ABCWS3
200162 ABCWS2
200148 OutputLog
200162 OutputLog
在此结果200162中出现了三次,因为每个结果中的合成名称都不同。但是我的要求是只获得200162的第一行。如果结果多次包含相同的flow_id,则它应仅显示第一个flow_id的结果,而忽略第二个和第三个中的任何内容。
EXPECTED OUTPUT -
200162 ABCWS1
200148 ABCWS3
您能帮我修改查询吗?
预先感谢您!
答案 0 :(得分:1)
似乎您想为每个flow_id
取其字典上的第一个复合名称:
WITH cte AS (
SELECT t.*, ROW_NUMBER() OVER (PARTITION BY flow_id ORDER BY COMPOSITE_NAME) rn
FROM CUBE_INSTANCE t
WHERE flow_id IN (200148, 200162)
)
SELECT flow_id, COMPOSITE_NAME
FROM cte
WHERE rn = 1;
答案 1 :(得分:1)
除非列指定了该信息,否则没有“第一”行。
但是您可以轻松地将聚合用于此目的:
select ci.flow_id, min(ci.composite_name)
from cube_instance ci
where flow_id in (200148, 200162);
group by ci.flow_id
如果要做有指定顺序的列,您仍然可以使用聚合。 Oracle中“第一”功能的等效项是:
select ci.flow_id,
min(ci.composite_name) keep (dense_rank first order by <ordering col>)
from cube_instance ci
where flow_id in (200148, 200162);
group by ci.flow_id