繁体   English   中英

Oracle SQL 随机排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM