Ich versuche, Daten aus einer Quelltabelle in eine temporäre Tabelle mit der Funktion NEWID()
einfügen, so dass ich eine (ziemlich) zufällige Auswahl von Zeilen aus meiner Quelle Tabelle.SQL - Rückgabe zufällige Zeilen aus einer temporären Tabelle mit NEWID()
unter dem unten genannten Code Sehen, ich die Daten, die ich in die temporären Tabelle muß einfügen #x
und Punkt 1, wo ich von #x
wählen, es gibt die Daten in einer zufälligen Reihenfolge.
jedoch bei Punkt 2, wo ich die Daten von #x
bin Eingrenzung (I akkumulieren Linien, bis eine bestimmte Menge erreicht wird) die SELECT nicht mehr zufällige Zeilen zurückgibt - es gibt Zeilen in einer bestimmten Reihenfolge vom Beginn der Der Tisch.
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**
Irgendwelche Ideen zu was ich vermisse?
Danke.
Ihre Anfrage und Ihre Frage sind verwirrend. Ein Teil der Frage scheint eine zufällige Reihe von Zeilen zu haben. Der Code generiert jedoch die ersten N Zeilen, die zu einem bestimmten Wert hinzufügen. –
Ich bin ein bisschen verwirrt Gordon. Ich versuche willkürliche Zeilen aus einer Tabelle auszuwählen, bis eine bestimmte kumulative Menge erreicht ist. – Johnathan
FYI, Postgres 9.5 hat den Befehl ['TABLESAMPLE'] (https://www.postgresql.org/docs/current/static/sql-select.html) erhalten, um fast zufällig eine Stichprobe von Teilmengen der Zeilen zu ziehen. Diskutiert am Ende dieser [http://stackoverflow.com/a/8675160/642706] ähnliche Frage. –