Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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 :rolleyes:

okay, danke ich werde es mal testen.

Gebe dir dann ein Feedback ;)

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.

werde es versuchen :)

Danke

es funktioniert eigtl super, jedoch müsste die Tabelle zuerst geordnet werden, bevor das Rownum die Zeilen "beschriftet"

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 :-/

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?!

nein gibts leider nicht =(

ich vrwende eine test tabelle nd habe davon das initialisierungsscript, also keine angst um die daten :)

Bearbeitet von JasonLief

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

)

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

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)

mit Limit oder Top?

oder wie meinst du das?

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';

ja danach ist es klar aber danke

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.