Oracle SQL随机排序

时间:2015-06-30 15:49:18

标签: sql oracle sorting

在我的数据库中,每个ID都有多条记录。在我的输出中,我想按DATE为每个ID排序行,而最终随机显示ID。

这是我的代码,但是显示已排序的ID,没有随机ID:

SELECT ID,  VALUE, DATE
FROM TABLE
ORDER BY ID, DATE DESC;

我尝试将其更改为

SELECT ID,  VALUE, DATE
FROM TABLE
ORDER BY ID, dbms_random.value, DATE DESC;

但它没有用,并给了我这个错误:

ORA-01652: unable to extend temp segment by 64 in tablespace TEMP01

我的猜测是我没有更多的磁盘分配给我的TEMP表空间,但是如何修改呢? 此外,我不确定我是否正确使用了dbms_random.value,是吗?

为了进一步说明我最终显示随机ID的想法,请参阅以下示例:

Origial:

ID    VALUE    DATE
1     200     1/2/2013
1     300     3/26/2013
2     200     2/2/2013
3     100     2/3/2015
3     500     6/21/2014
3     200     5/3/2014

所需:

ID    VALUE    DATE
2     200     2/2/2013
3     200     5/3/2014
3     500     6/21/2014
3     100     2/3/2015
1     200     1/2/2013
1     300     3/26/2013

1 个答案:

答案 0 :(得分:4)

如果您想要随机样本,请使用sample子句或其他一些技巧。如果近似数字足够,那么您可以通过以下方式获得1%的样本:

SELECT ID,  VALUE, DATE
FROM TABLE SAMPLE (1);

另一种方法是:

SELECT ID, VALUE, DATE
FROM TABLE 
WHERE dbms_random.value < 0.01;

我不确定您想要什么类型的采样(严格随机,分层,整群采样等)。但是,不需要对所有80,000,000行进行排序。