NEWID()を使用して一時テーブルからランダムに行を返します表。以下のコードを見てみるとSQL - 私は私のソースからのラインの(かなり)ランダムな選択を得るように<code>NEWID()</code>機能を使用して一時テーブルにソーステーブルからデータを挿入しようとしています
が、私は一時テーブル#x
に私は必要なデータを挿入して、私は#x
から選択ポイント1で、それがランダムな順序でデータを返します。
しかし、ポイントIは#x
からデータを絞り込む午前2でSELECTがもはやランダム行を返す(Iは一定量に到達するまでの行を蓄積する) - これは、先頭から順に行を返しますテーブル。
DROP TABLE IF EXISTS #x
CREATE TABLE #x (Id INT, Commodity VARCHAR(3), Quantity FLOAT, RowNum INT, TotalQuantity FLOAT)
INSERT INTO #x (id,commodity,quantity,rownum,totalquantity)
SELECT
i.id, i.commodity, i.quantity, ROW_NUMBER() OVER (ORDER BY i.id), SUM(i.quantity) OVER (ORDER BY i.id RANGE UNBOUNDED PRECEDING)
FROM inventory i
WHERE .........
.........
ORDER BY NEWID()
SELECT * FROM #x -------- **POINT 1**
DECLARE @y INT = (SELECT MIN(rownum) AS minrownum FROM #x WHERE totalquantity >= @tonnes)
SELECT #x.id, #x.commodity, #x.quantity, #x.rownum, #x.totalquantity FROM #x
WHERE #x.rownum <= @y
ORDER BY NEWID() -------- **POINT 2**
私には何が欠けていますか?
ありがとうございました。
あなたのクエリや質問が混乱しています。問題の一部は、ランダムな行セットが必要なようです。ただし、コードは特定の値に追加する最初のN行を生成しています。 –
私は少しゴードン自分自身を混乱させる。私がしようとしているのは、ある累積量に達するまで、テーブルからランダムな線を選択することです。 – Johnathan
FYI、Postgresの9.5は、ほぼランダム行のサンプルサブセットを引っ張るために[ 'TABLESAMPLE'(https://www.postgresql.org/docs/current/static/sql-select.html)コマンドを得ました。同様の質問に[この回答](http://stackoverflow.com/a/8675160/642706)の終わりに議論しました。 –