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