Oracle: Select soll nur 10 zufällige Datensätze zurückgeben

zuckerbrini

Mitglied
Hallo!

Ich habe einen select der mir jede Menge Ergebnisse liefert. Jetzt möchte ich aber, dass er mir nur zufällig zehn dieser Datensätze gibt und wenn ich den Selcet beim nächsten mal wieder aufrufe, soll er wieder 10 andere zurückgeben.

Habs jetzt mal so versucht:
Code:
SELECT * FROM(
      hier kommt dann mein select
) where rownum <= 10
so bekomme ich aber leider immer nur die ersten zehn Datensätze zurück.

Hab dann noch was mit Sample gefunden.
Also so in etwa
Code:
select * from tabelle
sample(10)
nur verstehe ich da leider nicht wo ich meine ganzen where-bedinungen hinschreiben kann und finde dazu auch nichts was mir wirklich weiter hilft.

Hoffe ihr könnt mir bei meinem Problem helfen!
 
Danke für die schnelle Antwort.

Nur bekomme ich leider immer die Fehlermeldung 'ORA-0933: SQL command not properly ended'

außerdem sieht es ganz so als würde meine Orcale-Versio den rand()-Befehl (und auch random() ) nicht kennen. Ist das möglich
 
Danke für die schnelle Antwort.

Nur bekomme ich leider immer die Fehlermeldung 'ORA-0933: SQL command not properly ended'

außerdem sieht es ganz so als würde meine Orcale-Versio den rand()-Befehl (und auch random() ) nicht kennen. Ist das möglich

Ja.....das was ich gepostet habe, war auch vom Mysql.....sorry, aber vielleicht hilft dir diese Seite weiter (ich kenne mich nur gaaaaaaanz schlecht mit Oracle aus) ;)

http://www.databasejournal.com/feat...ting-random-numbers-and-strings-in-Oracle.htm
 
Nur der Vollständigkeit halber: die sample clause bezieht sich immer auf eine echte Tabelle (und nicht auf eine View oder Subquery, da die physikalische Ebene der Datenhaltung betroffen ist), so dass auch folgende Variante möglich wäre:
Code:
-- Test-Tabelle mit 1000 Sätzen
SQL> create table test
  2  as
  3  select rownum id
  4    from dual
  5  connect by level <= 1000;

Tabelle wurde erstellt.

-- die rownum-Query liefert erwartungsgemäß die ersten zehn Sätze
SQL> select *
  2    from test
  3   where rownum < 10;

        ID
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9

9 Zeilen ausgewählt.

-- mit der sample-clause in der Subquery (die dann auch zusätzliche Einschränkungen enthalten kann)
-- bekommt man die zufällig ausgewählten Sätze
SQL> select *
  2    from (select *
  3            from test sample (10)
  4           where id > 100)
  5   where rownum < 10;

        ID
----------
       101
       104
       107
       108
       123
       125
       127
       129
       132

9 Zeilen ausgewählt.

Wenn's aber nur um die Sortierung geht, ist dbms_random sicher der einfachere Weg. Ein paar Details zum Thema findet man (außer in der Oracle-Doku) auch noch in Jonathan Lewis' großartigem Blog.

Gruß

MP
 

Neue Beiträge

Zurück