Den letzten Eintrag aus Datenbank ziehen (Oracle SQL Dev.)

singhclgn

Mitglied
Hallo liebe Community,
ich schreibe zurzeit an einem Java Programm.

Kurze Darstellung der Komponenten:
Ich habe eine Tabelle "Einträge".
Diese Tabelle hat folgende Spalten:
Datum (welches automatisch eingetragen wird wenn der User einen double Eintrag macht)
Eingabe (Das ist die double Zahl vom User)

Das Programm soll nun bei zum Beispiel 5 Einträgen auf die letzten 2 Eingaben des Users zugreifen und im Programm wieder geben.

Wenn die Tabelle so aussieht:

21.01.2022 500
01.03.2022 551
04.05.2022 629
30.06.2022 701
15.07.2022 781

Dann soll das Programm mir die 701 und die 781 ausgeben.

Wie könnte man das am sinnvollsten machen?
Es ergibt keinen Sinn folgendes "SQL Statement" zu benutzen: Select where datum 30.06.2022 weil bei einem neuen Eintrag ist das nicht mehr zu gebrauchen.

Bitte um Hilfe!!
 
Das kommt auf die DB an, z.B.:
SQL:
select *
from <table>
order by <date> desc
fetch next 2 rows only
Gibt die 2 neuesten Datensätze aus.
 
Das kommt auf die DB an, z.B.:
SQL:
select *
from <table>
order by <date> desc
fetch next 2 rows only
Gibt die 2 neuesten Datensätze aus.
Das gibt mir den Fehler: "ORA-00936: Ausdruck fehlt" aus.
Ich vermute da fehlt "Where". Ein Select muss ja immer SELECT, FROM, WHERE haben. Bei deinem Beispiel haben wir ja nur Select und From oder...?
 
Where ist nicht unbedingt nötig. Ich kenne ja deine Tabellen nicht, wenn du etwas einschränken willst dann benötigst du das natürlich.
<table> - musst du durch deine Tabelle ersetzen
<date> - musst du durch deine Datumsspalte ersetzen.
Es kann auch sein, dass du eine uralte Oracle verwendest, das geht erst ab 12 - glaub ich.
Schreib doch mal hin, was für eine DB du verwendest. -> select * from v$version;
 
Zuletzt bearbeitet:
Dann Frage deine Tabelle doch sortiert ab.
dann kannst du die ersten beiten auswerten oder die lesten beiden.


SELECT * FROM tabellen_name ORDER BY spalten_name ASC|DESC
 
Where ist nicht unbedingt nötig. Ich kenne ja deine Tabellen nicht, wenn du etwas einschränken willst dann benötigst du das natürlich.
<table> - musst du durch deine Tabelle ersetzen
<date> - musst du durch deine Datumsspalte ersetzen.
Es kann auch sein, dass du eine uralte Oracle verwendest, das geht erst ab 12 - glaub ich.
Schreib doch mal hin, was für eine DB du verwendest. -> select * from v$version;
Habe tatsächlich 12. Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
 
Dann Frage deine Tabelle doch sortiert ab.
dann kannst du die ersten beiten auswerten oder die lesten beiden.


SELECT * FROM tabellen_name ORDER BY spalten_name ASC|DESC
Also wenn ich das mache, spuckt der mir nur die Tabelle sortiert aus....? Das brauche ich ja nicht, weil er mir die GANZE Tabelle gibt. Brauche nur die letzten beiden oder ersten beiden einträge
 
Dann sollte es funktionieren.
Ich habe alle Antworten hier probiert aber bekomme die verschiedensten Fehlermeldungen:

select * from TABELLENNAME order by date desc fetch next 2 rows only;
ORA-00936: Ausdruck fehlt

select * from TABELLENNAME order by date desc limit 2;
Selber Fehler

select SPALTE from TABELLENNAME order by date desc fetch first 2 rows only;
Selber Fehler

SELECT TOP 2 FROM tabellenname ORDER BY Id DESC;
ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden
 
SELECT * FROM (
SELECT * FROM TABELLE ORDER BY DATUM DESC)
WHERE ROWNUM <= 2

Das geht. Oracle liefert dir eine Rownum, die die Nummer der Zeile ist - allerdings vor der Sortierung. Das heißt sortieren in einem sub-select und dann mit einem Query drum rum limitieren.
 
SELECT * FROM (
SELECT * FROM TABELLE ORDER BY DATUM DESC)
WHERE ROWNUM <= 2

Das geht. Oracle liefert dir eine Rownum, die die Nummer der Zeile ist - allerdings vor der Sortierung. Das heißt sortieren in einem sub-select und dann mit einem Query drum rum limitieren.
Hey Vielen Dank das funktioniert tatsächlich!! Das gibt mir wirklich die letzten 2 Einträge an!! Danke. Aber ich brauche beide jeweils einzeln. Um das hinzubekommen habe ich die 2 mit einer 1 ersetzt. Dann wird mir nur der letzte Eintrag ausgegeben. Wie kann ich nur den vorletzten ausgeben lassen? Vielen dank aber schonmal. Es klappt!
 

Zurück
Oben