Announcement

Collapse
No announcement yet.

Zufallswerte ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zufallswerte ermitteln

    Hallo zusammen,
    ich habe eine Grundgesamtheit von ca. 150.000 Datensätzen in Oracle 7.3
    ermittelt. Aus dieser Menge möchte ich insgesamt 50.000 Datensätze in eine Ergebnistabelle schreiben. Die entsprechenden Datensätze sollten nach einem Zufallsalgorythmus ausgewählt werden. geht sowas?

    Vielen Dank im Voraus

  • #2
    Hi,

    Warum nicht den kompletten Datenbestand auswerten ?????

    Gruß
    Gesin

    Comment


    • #3
      Hallo,

      beim Microsoft SQL Server 2000 könnte man dazu auf <b>NEWID</b> zurückgreifen. Die folgende Abfrage ermittelt 50 Datensätze, wobei sich der Inhalt bei jedem Aufruf unterscheidet. Ich habe aber nicht untersucht, wie statistisch "zufällig" die Ergebnisse sind:
      <pre>
      SELECT TOP 50 ContactName FROM dbo.Customers
      ORDER BY NEWID()
      </pre>
      Hinter der Funktion NEWID steckt eine generierte GUID (Global Unique Identifier), die ansonsten in der COM-Welt üblich ist.

      Eventuell hat ORACLE so etwas (GUID) auch im Angebot

      Comment


      • #4
        Hi,
        <br>
        <br>muß das auf dem Server passieren, oder kann das auch ein externes Programm machen?
        <br>
        <br>Wenn nicht das nicht auf dem Server laufen muß, kann man ggf. unter Oracel Funktionen aus einer DLL aufrufen (Stichwort externe Funktionen)? Dann könnte man so etwas mit hilfe einer externen Funktion machen.
        <br>
        <br>Wenn es doch auf dem Server sein muß dann probier mal den folgenden Klassiker unter den Zufallszahlengeneratoren:
        <br>
        <br>Formel:
        <br>
        <FONT FACE="Arial" SIZE=5>X</FONT><FONT FACE="Arial" SIZE=2>n+1</FONT><FONT FACE="Arial" SIZE=5> = FRAC(147 * X</FONT><FONT FACE="Arial" SIZE=2>n</FONT><FONT FACE="Arial" SIZE=5>)</P></FONT>
        <br>Frac(x) = nicht-ganzzahlige Teil von x
        <br>Nachteil ist natürlich, das man dies auch mit einer Zahl beginnen muß (das was auch randomize macht). Hier kann man aber ja auf die Funktion gettime oder GetDate (ich weiß jetzt leider nicht wie das bei Oracle heißt) zurückgreifen und irgend wie durch die Summe von jahr+monat+tag+stunde+minute+sekunde eine Zahl generieren (die oben drein auch noch zufällig ist).
        <br>Das Ganze sieht dann ungefähr so aus:
        <br>Pascalcode:
        <pre>
        program zufall;

        var
        i : LongInt;
        anfang : real;

        Procedure randomize;
        Begin
        anfang := 0.123; {Hier muá noch Frac(((jahr+monat+...)/ irgend eine Kommazahl)) hin}
        End;

        function random(Max : LongInt) : LongInt;
        Begin
        anfang := Frac(anfang*147);
        random := Round(anfang*Max*2);
        End;

        begin
        randomize;
        for i := 1 to 200 do
        begin
        write(random(10),' ');
        end;
        end.
        </pre>
        <br>
        <br>mfg
        <br>P

        Comment

        Working...
        X