如何在oracle中使用distinct删除子查询中的重复项

时间:2013-03-30 07:10:48

标签: sql oracle distinct

我想删除从这个sql返回的重复行:

Select
      *
    From (Select
      Security_Symbol,
      Security_Name,
      date1,
      time1,
      last1,
      Changefromopen,
      percentchangefromopen
    From
      xgdv
    Where
      Security_Symbol In ('abc', 'def', 'ghi')
    Order By
      date1 desc,
      time1 asc) where rownum <= 3

在子查询中使用distinct不会删除重复的记录。

在子查询中使用distinct有什么问题。我如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

如果您有多个行具有相同的Security_Symbol / Security_Name,但只希望结果中的每个组合有一行,那么您需要确定所需的数据。您可能需要其他列的范围,如:

Select
  Security_Symbol,
  Security_Name,
  min(date1), max(date1),
  min(time1), max(time1)
  min(last1), max(last1),
  min(Changefromopen), max(Changefromopen),
  min(percentchangefromopen), max(percentchangefromopen)
From
  xgdv
Where
  Security_Symbol In ('abc', 'def', 'ghi')
Group by
  Security_Symbol, Security_Name
Order By
  Security_Symbol, Security_Name

这可能不是您正在寻找的解决方案;如果不是,请指定您感兴趣的其他列的数据。例如:任意随机行,平均值,......

答案 1 :(得分:0)

尝试调用子查询中基表的所有列 - 可能更明显哪些行是相似的。您还可以尝试向子查询添加排名以突出显示重复的行。这将是解决造成欺骗的原因的起点。