Veröffentlicht 3. August 201015 j Hallo FFI-User Ich sollte mal eure Hilfe haben, hoffe ich bin jetzt im richtigen Forum Ich müsste ein select auf eine Tabelle machen, das mir z.B den 2000 Datensatz anzeigt, jedoch wenn die Tabelle geordnet ist. Das select müsste etwa so aussehen: SELECT datum FROM [Tabelle] WHERE Datensatznr = 2000 also der 2000 Datensatz, aber erst wenn die Tabelle nach Datum geordnet ist. Rowcount funktioniert nicht, hat ein arbeitskollege gesagt, weil die Datensätze physisch vielleicht ganz anders abgelegt sind Danke für Tipps und Infos JL
3. August 201015 j Ich bin was oracle angeht jetzt nicht sooo bewandert und kanns hier nicht testen, aber : select * from ( select * from table order by date_column ) where ROWNUM = 2000 Afaik wird in Oracle die ROWNUM vor der ORDER BY Klausel berechnet, was du aber mit dem Subquery loesen kannst dann. Rein prinzipiell muesste das so funktionieren, tests mal Gruss Sven Ps. Bevor mich einer ueber Rechtschreibung flamt, ich sitz hier an ner schwedischen Tastatur, und die ist nicht fuer die deutsche Sprache gemacht
3. August 201015 j Hi, das wird nicht gehen, weil ... Ask Tom: On ROWNUM and Limiting Results Du wirst das auch nicht ohne PL/SQL lösen können, oder du nummerierst die Datensätze im Vorfeld.
3. August 201015 j select * from ( select rownum "nr", t.* from table t order by date_column ) where nr = 2000
3. August 201015 j Hi, das wird nicht gehen, weil ... Ask Tom: On ROWNUM and Limiting Results Du wirst das auch nicht ohne PL/SQL lösen können, oder du nummerierst die Datensätze im Vorfeld. wie geht es den im PL/SQL? Die datensätze kann ich schlecht nummerieren, da die Tabelle vom Kunden vorgeschrieben wird.
3. August 201015 j Hi, ich korrigiere mich, das Beispiel von emetiel sollte funktionieren wenn man das zweite "nr" in Anführungszeichen setzt.
3. August 201015 j es funktioniert eigtl super, jedoch müsste die Tabelle zuerst geordnet werden, bevor das Rownum die Zeilen "beschriftet"
3. August 201015 j es gibt noch ein problem, ich muss nacher ein delete machen, und mache ich das delete mit dem select, fuktioniert das nicht, denn aus einer view kann man nicht löschen: also mit: delete from (select Rownum AS nr, s.* from (select t.* from OVERFLOW_TEST t order by TABELLE ) s ) where nr < 50 ist nichts :-/
3. August 201015 j Hi, gibt es denn nichts Eindeutiges in der Tabelle? Irgendeine Spalte mit ID, nach der man suchen kann? Ich fürchte nun doch, dass wenn du komplexere Dinge als "nur" ein select ausführen möchtest, um komplexere Programmierarbeiten nicht herumkommen wirst. Aber ich lerne auch gerne dazu. Übrigens hoffe ich, dass du bei allem was du tust ein Backup von den Daten hast?!
3. August 201015 j nein gibts leider nicht =( ich vrwende eine test tabelle nd habe davon das initialisierungsscript, also keine angst um die daten Bearbeitet 3. August 201015 j von JasonLief
4. August 201015 j Probiers mal hiermit delete OVERFLOW_TEST where rowid in ( select rid from ( select RID, rownum as RNR from ( select rowid as RID from OVERFLOW_TEST t order by TABELLE ) ) where nr < 50 )
4. August 201015 j Was genau möchtest Du denn eigentlich machen? Es gibt keinen x-ten Eintrag in einer Tabelle. Dort ist alles kunterbunt gemischt. Ebenso gibt es keine fortlaufende Nummer. ROWNUM ist eine Pseudospalte, die von Oracle an eine zeile vergeben wird, wenn die WHERE Bedingung erfüllt ist. ROWID wiederum ist etwas völlig anderes und hat auch nichts mit der Reihenfolge zu tun. Dim
4. August 201015 j Was genau möchtest Du denn eigentlich machen? Es gibt keinen x-ten Eintrag in einer Tabelle. Dort ist alles kunterbunt gemischt. Ebenso gibt es keine fortlaufende Nummer. ROWNUM ist eine Pseudospalte, die von Oracle an eine zeile vergeben wird, wenn die WHERE Bedingung erfüllt ist. ROWID wiederum ist etwas völlig anderes und hat auch nichts mit der Reihenfolge zu tun. Dim Also ich muss eine Tabelle bereinigen mit z.B 2500 Datensätzen. Diese Tabelle darf/sollte aber aus verschiedenen Gründen nicht mehr als 2000 Datensätze haben. Jetzt brauche ich ja den 2000 Datensatz, damit ich nacher alles löschen kann, das älter ist(sehe ich anhand von einer Timestamp Spalte)
4. August 201015 j Da kannst du mit dem o.g. Select das Minimum der TimeStamps der 2000 Datensätze ermitteln und löscht dann alles was kleiner als dieses Minimum ist, dh. alles was älter ist.
4. August 201015 j Hi, dann musst du aber absteigend sortieren, denn sonst löscht du ja genau anders herum. Du hättest dann bei 2500 Datensätzen ja quasi nur noch 500. Wenn du den 2000. Datensatz hast, löscht du einfach alles was älter ist: delete from table where date < '1997-04-12:12:59:00';
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.