[英]Oracle SQL Order By Random
在我的数据库中,每个 ID 都有多个记录。 在我的输出中,我想按日期为每个 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 的想法,请参见以下示例:
原文:
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
如果您想要随机样本,请使用sample
子句或其他一些技术。 如果近似数字足够,那么您可以通过执行以下操作获得 1% 的样本:
SELECT ID, VALUE, DATE
FROM TABLE SAMPLE (1);
另一种方法是:
WITH t AS (
SELECT t.*, dbms_random.value as rnd
FROM TABLE t
)
SELECT ID, VALUE, DATE
FROM t
WHERE rnd < 0.01
我不确定您想要什么类型的抽样(严格随机抽样、分层抽样、整群抽样等)。 但是,不需要对所有 80,000,000 行进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.