消除包含CLOB列的选择查询中的重复结果

时间:2017-03-05 05:32:06

标签: oracle distinct

这是选择查询:

select orderid,ordernum,orderdate,orderxml from orders

查询返回多个具有相同ordernum的行。我尝试使用DISTINCT和Group BY,但orderxml是clob列。 如何在查询中消除重复的ordernums?

1 个答案:

答案 0 :(得分:0)

您可以使用分析函数为每个orderid标识单个ordernum - 可能是最小值或最大值,但其他函数可用,它取决于您需要的内容 - 在子查询中,以及然后过滤以仅获取具有已识别ID的行:

select orderid, ordernum, orderdate, orderxml
from (
  select orderid, ordernum, orderdate, orderxml,
    max(orderid) over (partition by ordernum) as maxorderid
  from orders
)
where orderid = maxorderid;

内联视图从表中获取所有列和行,但在其结果中添加了一个附加列,该列具有相同订单号的所有行的最大ID。 (您可以在其中添加任何其他所需的过滤器,当然也可以。)

外部过滤器只匹配与该最大值匹配的每个订单号的ID。

这假设orderid是唯一的 - 至少对ordernum而言是全局的。您说orderdate的{​​{1}}始终相同,但如果没有,您可以将其包含在分区中,可能会修改所使用的分析函数。

(然后调查你是如何以及为什么要获得重复项,并试图阻止它们;然后从表中删除重复项 - 仔细...)