在Oracle SQL中有效地选择随机重复条目

时间:2017-07-19 09:10:18

标签: sql database oracle oracle11g

我有一个看起来像这样的数据集

   id   date
  250  01-JAN-15
  250  01-MAR-15
  360  01-JUN-15
  470  01-FEB-15
  470  01-DEC-15
  470  01-NOV-15
  780  01-APR-15
  790  01-SEP-15
  790  01-MAY-15

我想随机选择行,这样重复的id只会出现一次。例如:

   id   date
  250  01-MAR-15
  360  01-JUN-15
  470  01-FEB-15
  780  01-APR-15
  790  01-SEP-15

我当前的解决方案使用分析函数,这需要很长时间才能在数亿行上运行:

select * from(
 select aa.*, row_number() over (partition by id order by dbms_random.value) as random_flag 
 from table aa)
where random_flag = 1

有关如何在没有分析功能的情况下获得相同结果的任何提示?

1 个答案:

答案 0 :(得分:0)

您可以尝试此查询:

SELECT id, (select t2.date from table t2 where t2.id = t1.id and rownum = 1)
FROM table t1
GROUP BY id;