【发布时间】:2017-07-19 09:10:18
【问题描述】:
我有一个看起来像这样的数据集
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
我想随机选择行,这样重复的ids 只会出现一次。例如:
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
关于如何在没有分析函数的情况下获得相同结果的任何提示?
【问题讨论】:
-
你可以在组中取 min() 或 Max() 值而不是随机的吗?
-
不。它必须是随机的
-
您要设置所有
IDs 还是只设置一个子集? -
我需要所有
IDs -
您目前正在做的事情似乎已经是最有效的方式了。你用这个干什么?也许为每个不同的 ID 选择随机行的想法并不是解决更高级别问题的唯一(或者甚至不是最好的)方法。
标签: sql database oracle oracle11g