在我的数据库中,每个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
答案 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行进行排序。