oraclesql随机排序

oraclesql随机排序,sql,oracle,sorting,Sql,Oracle,Sorting,在我的数据库中,每个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

在我的数据库中,每个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
我的猜测是,我没有更多的磁盘分配给我的临时表空间,但如何修改它? 此外,我不确定是否正确使用了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

我不确定你想要什么样的抽样——严格的随机抽样、分层抽样、整群抽样等等。但是,不需要对所有8000000行进行排序。

如果需要随机样本,请使用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

我不确定你想要什么样的抽样——严格的随机抽样、分层抽样、整群抽样等等。但是,不必对所有8000000行进行排序。

现实世界中的表有多大?我正在从原始数据中提取树列,其中有82000000行和50列。随机排序的业务目的是什么?这是可能的。但是在一张8200万行的桌子上做这件事要花很多钱。你真的真的,真的确定这种费用是出于商业目的吗?你说得对。随机排序的数据只是为了确保我将有随机样本用于我的进一步分析。如果我不做随机排序,那么我以后必须选择随机样本。但是,我不知道如何在SQL中进行随机抽样。你可以考虑使用随机值的RONNUM伪列表来实现你的目标。真实世界表有多大?我从原始数据中提取树列,它有82000000行和50列。随机排序的商业目的是什么?这是可能的。但是在一张8200万行的桌子上做这件事要花很多钱。你真的真的,真的确定这种费用是出于商业目的吗?你说得对。随机排序的数据只是为了确保我将有随机样本用于我的进一步分析。如果我不做随机排序,那么我以后必须选择随机样本。但是,我并不知道如何在SQL中进行随机抽样。您可以考虑使用随机值的RONNUM伪列表来实现您的目标。您是正确的,对所有80000000行进行排序实际上是不必要的。谢谢:。。。其中dbms_random.value<0.01将随机返回全部或无。您必须以某种方式将dbms_random.value随机合并到数据集中,例如:使用t作为select id、value、date、dbms_random.value rand from table select id、value、date from t,其中rand<0.01@安托因。非常感谢。我修正了答案。你是对的,对所有8000000行进行排序真的没有必要。谢谢:。。。其中dbms_random.value<0.01将随机返回全部或无。您必须以某种方式将dbms_random.value随机合并到数据集中,例如:使用t作为select id、value、date、dbms_random.value rand from table select id、value、date from t,其中rand<0.01@安托因。非常感谢。我修正了答案。