2012-04-29 51 views
0

我擁有的表格大約有100多萬個條目,默認情況下它是按'A'排序的。可能有許多項目與列A相同,A從0增加到...一個很大的數字。我嘗試過TABLESAMPLE,但它並沒有從每個數字中選擇一個好的數字,它跳過了其中的一部分,或者我沒有使用它。所以我想從每個A號碼中選擇相同數量的值。我希望所選行的總數是一個數字,比方說1000萬,或者我們稱之爲B.從巨大的表格中選擇小樣本的快速方法

+1

什麼數據庫和版本您使用的? –

+0

即時通訊使用ms sql-server – luis

+2

似乎你想要一個非常具體的集合,而不是樣本。每次運行查詢時,每個A編號的值集合是否需要不同/隨機?你能描述桌子上的索引嗎?一個重要的區別:表格不是「默認排序」 - 表格是無序的一組行。雖然可能有一個聚集索引指示分配順序,但並非所有查詢都會按該順序返回數據,因此不應依賴它。 –

回答

2

雖然我不清楚你需要達到什麼,但當我需要一個大樣本子集時是很好的父母和/或共同的屬性值之間的分配,我已經做了這樣的:

SELECT * 
FROM YourTable 
WHERE (YourID % 10) = 3 

這也具有的優點是,你可以通過改變「3」得到另一個完全不同的樣品只是另一個數字。另外,您可以通過調整「10」來更改子樣本大小。

1

您可以使用NEWID()

SELECT TOP 100 
    * 
FROM 
    YourTable 
ORDER BY NEWID() 
0

@RBarryYoung的解決方案是正確的,通用的,它可以用於任何常量統計分佈,如ID序列(或任何自動增量列)。但是,有時候,您的分發不是恆定的,或者您可能遇到性能問題(SQL Server必須掃描所有索引條目以計算WHERE子句)。

如果其中任何會影響您的問題,考慮到內置的T-SQL操作TOP可滿足您的需求:

SELECT TOP (30) PERCENT * 
FROM YourTable; 
相關問題