dat*_*ata 1 sql sorting oracle
在我的数据库中,每个 ID 都有多个记录。在我的输出中,我想按日期为每个 ID 对行进行排序,而 ID 最终会随机显示。
这是我的代码,它有效但显示排序的 ID,没有随机 ID:
SELECT ID, VALUE, DATE
FROM TABLE
ORDER BY ID, DATE DESC;
Run Code Online (Sandbox Code Playgroud)
我试着把它改成
SELECT ID, VALUE, DATE
FROM TABLE
ORDER BY ID, dbms_random.value, DATE DESC;
Run Code Online (Sandbox Code Playgroud)
但它不起作用并给了我这个错误:
ORA-01652: unable to extend temp segment by 64 in tablespace TEMP01
Run Code Online (Sandbox Code Playgroud)
我的猜测是我没有更多的磁盘可以分配给我的 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
Run Code Online (Sandbox Code Playgroud)
期望:
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
Run Code Online (Sandbox Code Playgroud)
如果您想要随机样本,请使用sample子句或其他一些技术。如果近似数字足够,那么您可以通过执行以下操作获得 1% 的样本:
SELECT ID, VALUE, DATE
FROM TABLE SAMPLE (1);
Run Code Online (Sandbox Code Playgroud)
另一种方法是:
WITH t AS (
SELECT t.*, dbms_random.value as rnd
FROM TABLE t
)
SELECT ID, VALUE, DATE
FROM t
WHERE rnd < 0.01
Run Code Online (Sandbox Code Playgroud)
我不确定您想要什么类型的抽样(严格随机抽样、分层抽样、整群抽样等)。但是,不需要对所有 80,000,000 行进行排序。
| 归档时间: |
|
| 查看次数: |
2985 次 |
| 最近记录: |