4

セットからサンプル行を選択する必要があります。たとえば、選択クエリが x 行を返す場合、 x が 50 より大きい場合、50 行のみを返しますが、上位 50 行だけでなく、結果セット全体に均等に分散する 50 行を返します。この場合のテーブルには、ルート (GPS 位置 + DateTime) が記録されます。DateTime で注文していますが、緯度と経度の値の適切なサンプルが必要です。よろしくお願いします [SQL Server 2008]

4

4 に答える 4

3

SQL Server でサンプル行を取得するには、次のクエリを使用します。

SELECT TOP 50 * FROM Table
ORDER BY NEWID();

n 行ごと(この例では 10行目)を取得する場合は、次のクエリを試してください。

SELECT * From 
(
  SELECT  *, (Dense_Rank() OVER (ORDER BY Column ASC)) AS Rank 
  FROM Table
) AS Ranking 
WHERE Rank % 10 = 0; 

ソース

他の一般的な RDBMS のランダム行を選択するクエリのその他の例は、http: //www.petefreitag.com/item/466.cfmにあります。

于 2010-06-20T11:00:23.283 に答える
3

n 行ごとに 50 を取得します。

SELECT *
FROM table
WHERE row_number() over() MOD (SELECT Count(*) FROM table) / 50 == 0
FETCH FIRST 50 ROWS ONLY

ランダムなサンプルが必要な場合は、jimmy_keen の回答を使用してください。

更新:MS SQLで実行するための要件に関しては、これに変更する必要があると思います(ただし、テストするMS SQL Serverはありません):

  SELECT TOP 50 *
   FROM (
     SELECT t.*, row_number() over() AS rn, (SELECT count(*) FROM table) / 50 AS step
     FROM table t
   )
   WHERE rn % step == 0
于 2010-06-20T11:00:32.357 に答える
1

乱数として取得される選択の結果セットに計算列を追加し、その列でソートされた上位 50 を選択することをお勧めします。これにより、ランダムなサンプルが得られます。

例えば:

SELECT TOP 50 *, RAND(Id) AS Random
FROM SourceData
ORDER BY Random

ここで、SourceData はソース データ テーブルまたはビューです。ちなみに、これは SQL Server 2008 上の T-SQL を想定しています。また、データ ソースに一意の ID を持つ Id 列があることも前提としています。ID が非常に小さい数値の場合は、次のように、RAND に渡す前に大きな整数を乗算することをお勧めします。

RAND(Id * 10000000)
于 2010-06-20T10:54:45.997 に答える
0

静的に正しいサンプルが必要な場合、tablesampleは間違った解決策です。ここでMicrosoftResearchの論文に基づいて説明した良い解決策は、CAST(ROW_NUMBER()OVER(...)AS BYTE)AS RAND_COL_のような追加の列を含む、テーブル上にマテリアライズドビューを作成することです。この列にインデックスを追加し、他の興味深い列を追加して、クエリの統計的に正しいサンプルをかなり迅速に取得します。(WHERE RAND_COL_ = 1を使用)。

于 2011-06-08T02:47:52.523 に答える