JasonLief Geschrieben 3. August 2010 Teilen Geschrieben 3. August 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
streffin Geschrieben 3. August 2010 Teilen Geschrieben 3. August 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JasonLief Geschrieben 3. August 2010 Autor Teilen Geschrieben 3. August 2010 okay, danke ich werde es mal testen. Gebe dir dann ein Feedback Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 3. August 2010 Teilen Geschrieben 3. August 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
emetiel Geschrieben 3. August 2010 Teilen Geschrieben 3. August 2010 select * from ( select rownum "nr", t.* from table t order by date_column ) where nr = 2000 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JasonLief Geschrieben 3. August 2010 Autor Teilen Geschrieben 3. August 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 3. August 2010 Teilen Geschrieben 3. August 2010 Hi, ich korrigiere mich, das Beispiel von emetiel sollte funktionieren wenn man das zweite "nr" in Anführungszeichen setzt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JasonLief Geschrieben 3. August 2010 Autor Teilen Geschrieben 3. August 2010 werde es versuchen Danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JasonLief Geschrieben 3. August 2010 Autor Teilen Geschrieben 3. August 2010 es funktioniert eigtl super, jedoch müsste die Tabelle zuerst geordnet werden, bevor das Rownum die Zeilen "beschriftet" Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JasonLief Geschrieben 3. August 2010 Autor Teilen Geschrieben 3. August 2010 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 :-/ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 3. August 2010 Teilen Geschrieben 3. August 2010 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?! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JasonLief Geschrieben 3. August 2010 Autor Teilen Geschrieben 3. August 2010 (bearbeitet) nein gibts leider nicht =( ich vrwende eine test tabelle nd habe davon das initialisierungsscript, also keine angst um die daten Bearbeitet 3. August 2010 von JasonLief Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
emetiel Geschrieben 4. August 2010 Teilen Geschrieben 4. August 2010 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 ) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 4. August 2010 Teilen Geschrieben 4. August 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JasonLief Geschrieben 4. August 2010 Autor Teilen Geschrieben 4. August 2010 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) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 4. August 2010 Teilen Geschrieben 4. August 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JasonLief Geschrieben 4. August 2010 Autor Teilen Geschrieben 4. August 2010 mit Limit oder Top? oder wie meinst du das? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 4. August 2010 Teilen Geschrieben 4. August 2010 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'; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JasonLief Geschrieben 4. August 2010 Autor Teilen Geschrieben 4. August 2010 ja danach ist es klar aber danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.