如何在oracle SQL中从结果中选择唯一记录?

如何在oracle SQL中从结果中选择唯一记录?,sql,oracle,group-by,distinct,Sql,Oracle,Group By,Distinct,我正在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出现了三次,因为每个结果中的复合名称不同。但我的要求

我正在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的第一行。若结果多次包含相同的流id,那个么它应该只显示第一个流id的结果,忽略第二个和第三个流id中的任何内容

EXPECTED OUTPUT - 

200162  ABCWS1
200148  ABCWS3
你能帮我修改一下查询吗


提前谢谢你

似乎您希望为每个流id使用按字典顺序排列的第一个组合名称:


似乎您希望为每个流id使用按字典顺序排列的第一个组合名称:


没有第一行,除非列指定了该信息

但您可以轻松地使用聚合来实现此目的:

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

没有第一行,除非列指定了该信息

但您可以轻松地使用聚合来实现此目的:

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

定义first flow_id。first表示某种排序,但您没有告诉我们您想要什么排序。是否希望复合_名称按字母顺序排在第一位的行?Oracle数据在表中是无序的-如@JustinCave所示,您需要在查询中定义某种排序顺序。此外,DISTINCT关键字适用于结果集中的所有列,而不仅仅是第一列-返回的每一行都是唯一的,不仅仅是第一列的值。定义第一个flow_id。first表示某种排序,但您没有告诉我们您想要的排序。是否希望复合_名称按字母顺序排在第一位的行?Oracle数据在表中是无序的-如@JustinCave所示,您需要在查询中定义某种排序顺序。另外,DISTINCT关键字适用于结果集中的所有列,而不仅仅是第一列-返回的每一行都是唯一的,不仅仅是第一列的值。您好,它工作正常,但是如何使用select语句将所有内容放入单个查询中。我对此感到困惑。实际上我的答案已经是一个问题了。如果您要问的是如何避免使用CTE,只需将其内联:从SELECT t.*中选择flow\u id、复合名称、行号。。。t其中rn=1谢谢你。。。。!!!它正在按照我的要求工作…@KushalKaria欢迎使用堆栈溢出。如果这个答案解决了你的问题,那么请考虑接受它,通过点击左边的绿色复选标记。你好,它工作得很好,但是如何把所有东西都用SELECT语句进行单个查询。我对此感到困惑。实际上我的答案已经是一个问题了。如果您要问的是如何避免使用CTE,只需将其内联:从SELECT t.*中选择flow\u id、复合名称、行号。。。t其中rn=1谢谢你。。。。!!!它正在按照我的要求工作…@KushalKaria欢迎使用堆栈溢出。如果这个答案解决了你的问题,那么请考虑接受它,点击左边的绿色复选标记。