这是选择查询:
select orderid,ordernum,orderdate,orderxml from orders
查询返回多个具有相同ordernum的行。我尝试使用DISTINCT和Group BY,但orderxml是clob列。 如何在查询中消除重复的ordernums?
答案 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}}始终相同,但如果没有,您可以将其包含在分区中,可能会修改所使用的分析函数。
(然后调查你是如何以及为什么要获得重复项,并试图阻止它们;然后从表中删除重复项 - 仔细...)