首页 > 解决方案 > SQL - Toad for Oracle v11.6。- 尝试在使用 Distinct 后为特定字段数据中的每个唯一值选择顶行

问题描述

希望以下信息对这里有更多帮助。我在 Toad for oracle 中运行了以下代码:

select distinct cc_orig, cc_base, txn_orig, txn_base 
from table a

它已按照以下方式返回了信息

cc_orig      cc_base        txn_orig      txn_base

GBP          CAD             50           35
GBP          CAD             75           45
GBP          CAD             20           10
EUR          CAD             10            8
EUR          CAD             13           11
AUD          CAD             90           50
AUD          CAD             15            5
AUD          CAD             80           45

我只想为 cc_orig 字段中的每个唯一值拉回一行(不管它是哪一行),因此新结果如下所示:

cc_orig      cc_base        txn_orig      txn_base
GBP          CAD             50           35
EUR          CAD             10            8
AUD          CAD             90           50

希望这是有道理的,有人可以提供帮助 - 我认为这类似于 Postgres 中的 Distinct On,但这似乎在 Toad 中不起作用

标签: sqloracledistinct

解决方案


您可以使用窗口函数:

select cc_orig, cc_base, txn_orig, txn_base
from (select cc_orig, cc_base, txn_orig, txn_base,
             row_number() over (partition by cc_orig order by cc_orig) as seqnum
      from table a
     ) a
where seqnum = 1;

请注意,您不需要select distinct. row_number()无论如何只能选择一个(任意)行。


推荐阅读