Я пытаюсь вставить данные из исходной таблицы во временную таблицу с помощью функции NEWID()
, чтобы получить (справедливый) случайный выбор строк из моего источника Таблица.SQL - Возвращение случайных строк из временной таблицы с помощью NEWID()
Глядя на код ниже, я ввожу данные мне нужно в временную таблицу #x
и в точки 1 где я выбираю из #x
, он возвращает данные в случайном порядке.
Однако в Поинте- ГДЕ Я сужая данные из #x
(я аккумулировать линии до тех пор, некоторое количество не будет достигнуто) ВЫБОР больше не возвращает случайные строки - он возвращает строки в последовательном порядке от начала стол.
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) на аналогичный вопрос. –