Oracle 10g Feste Anzahl aus einem Resultset oder Tabelle

planb2000

Erfahrenes Mitglied
Hallo,
Motivation:
-- In einer sortierten Liste/Tabelle stehen z.B. ca. 1,5 Million oder mehr Datensätze.
-- Aus dieser Liste(unabhängig wie groß die ist, also 1,5 Mill oder 200 Tausend) sollen nun genau 20.000 Datensätze entnommen werden.
Die Datensätze sollen NICHT randomisiert entnommen werden. Die 20.000 Ergebnisse sollen alle die selben Abstände(Nicht die Werte/Values sondern die Position soll gleich verteilt sein) haben.
Mit analytischen Funktionen habe ich schon gearbeitet. Kenne aber leider nicht die Richtige um diesen Ansatz zu entwickeln.
Fragen:
Konnte ich meine Frage verständlich stellen?
Hat jemand von Euch in dieser Richtung schon mal eine Fragestellung gehabt?
Evtl.: Was wäre hier der effizienteste Weg?

Danke für Vorschläge b.z.w einen Ansatz zur Lösung.

Grüße
 
Das ist was ich kenne, sind dann aber nur die ersten 20k. Ausser natürlich du kannst das im inneren irgendwie schon passend sortieren.

SQL:
SELECT 
	*
FROM
(
	SELECT
		*
	FROM
		myTable
	ORDER BY
		x, y, z
)
WHERE
	rownum <= 20000
;

Evtl. kannst du auch mit NTILE() OVER () entsprechend die Buckets abfüllen und dann nur einen ausgeben lassen.
 
Zuletzt bearbeitet von einem Moderator:
Hey,

der Hinweis auf NTILE() OVER() brachte die Lösung.

Mit dem NTILE markiere ich mir die Buckets --> Tabelle ist nun partitioniert. Um nun jeden 1. Eintrag im Bucket zu bekommen benutze ich ROW_NUMBER() OVER ().

@BaseBallBatBoy --> Danke für den Hinweis!!

Grüße an Alle
 
Kein Problem, gut dass ich helfen konnte!

Interessenshalber kannst du ja noch den Beispielcode posten, falls jemand anderes ein ähnliches Problem haben sollte ;)
 
Hier die Lösung in Prosa ;)

PHP:
SELECT *
FROM
(   
    SELECT buckets, row_number() over (PARTITION BY buckets ORDER BY a DESC )rang
    FROM 
    (    
        SELECT 
        ntile(20000) OVER(ORDER BY a desc) buckets,a,b,c
        FROM t_abc
        WHERE  1=1
    )
)
WHERE rang = 1
 

Neue Beiträge

Zurück