2017-03-05 61 views
0

这是选择查询选择查询重复结果:消除在包含CLOB列

select orderid,ordernum,orderdate,orderxml from orders 

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

+0

为什么你在你的表中重复'ordernum'?他们对'orderdate'和'orderxml'有相同的值吗?如果不是,您需要为这些列选择哪些值? – mathguy

+0

是的,它们对于orderdate和orderxml具有相同的值。 – user576914

回答

0

您可以使用分析函数为每个ordernum确定一个单独的orderid - 可能是最小或最大值,但其他函数可用,它取决于您需要的 - 在子查询中,然后筛选以仅获取行与识别的标识:

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总是相同,但是如果不是,您可以将其包含在分区中,可能会修改所使用的分析函数。

(然后调查你是如何以及为什么越来越重复,并试图阻止他们,然后从表中删除重复的 - 精心...)