首页 > 解决方案 > 如何从 oracle SQL 的结果中选择唯一记录?

问题描述

我在 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 的结果并忽略它在第 2 和第 3 中的任何内容。

EXPECTED OUTPUT - 

200162  ABCWS1
200148  ABCWS3

你能帮我修改查询吗?

先感谢您 !!!

标签: sqloraclegroup-bydistinct

解决方案


看来您想为每个取字典序上的第一个复合名称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;

推荐阅读