【问题标题】:Eliminate duplicate results in a select query that contains CLOB column消除包含 CLOB 列的选择查询中的重复结果
【发布时间】:2017-03-05 05:32:06
【问题描述】:

这是选择查询:

select orderid,ordernum,orderdate,orderxml from orders

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

【问题讨论】:

  • 为什么你的表中有重复的ordernumorderdateorderxml 的值是否相同?如果没有,您需要为这些列选择哪些值?
  • 是的,orderdate 和 orderxml 的值相同。

标签: oracle distinct


【解决方案1】:

您可以使用分析函数为每个 ordernum 识别单个 orderid - 可能是最小值或最大值,但其他函数可用,这取决于您的需要 - 在子查询中,然后过滤为仅获取具有标识 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 始终与ordernum 相同,但如果不是,您可以将其包含在分区中,可能会修改使用的分析函数。

(然后调查您获得重复项的方式和原因,并尝试阻止它们;然后从您的表中删除重复项 - 小心...)

【讨论】:

    猜你喜欢
    • 2019-04-17
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多