HSQLDB Abfrage: Nur den letzten Datensatz anzeigen.

Moin Liste,

Frage an die Datenbank-Spezialisten (winke, winke Robert Großkopf)
Ich will eine Abfrage dir mir nur den letzten Datensatz anzeigt.
Ich habe dafür keinen SQL-Befehl gefunden, sowas wie LastRecord.
Gibt es da was, was ich nicht gefunden habe?

Hallo Edgar,

wenn Du denn Datensatz mit der höchsten ID suchst, geht das hier:

SELECT table.* FROM table
     WHERE table.id = (SELECT MAX(id) FROM table);

Gruß,

Ralf

Hallo Edgar,

dazu solltest du dich über die sog. Aggregatfunktionen einlesen.

http://www.1keydata.com/de/sql/sql-funktionen.php

Im Abfrageeditor von Base gibt es zu jeder Spalte die Möglichkeit zum Gruppieren und dazu kannst du angeben welche Aggregatfunktion angewendet werden soll, du brauchst also nicht unbedingt einen SQL-Befehl zu scheiben.

Wie Ralf bereits richtig beschrieben hat, brauchst du auf der ID-Spalte die Aggregatfunktion MAX().

Grüße
Christian

Hallo Edgar,

Frage an die Datenbank-Spezialisten (winke, winke Robert Großkopf)
Ich will eine Abfrage dir mir nur den letzten Datensatz anzeigt.
Ich habe dafür keinen SQL-Befehl gefunden, sowas wie LastRecord.
Gibt es da was, was ich nicht gefunden habe?

Wenn Du den Primärschlüssel automatisch erstellen lässt wie von Ralf
geschrieben:
SELECT * FROM "Tabelle" WHERE "ID" = ( SELECT MAX( "ID" ) FROM "Tabelle" )

Ansonsten brauchst Du ein anderes Feld, in das z.B. ein Timestamp
gesetzt wird - nicht über ein Formular, sondern bei jeder Änderung
direkt in der Tabelle. Das geht dann aber nur über ein Makro, da ein
einfacher Defaultwert das leere Feld beim ersten Abspeichern ausfüllt,
aber nicht bei Änderungen aktualisiert.

Willst Du bei geöffneter Datenbank wissen, wie der letzte automatisch
gewählte ID-Wert lautet, so geht dies mit CALL IDENTITY().

Gruß

Robert

Hallo Ralf,

Hallo Edgar,

wenn Du denn Datensatz mit der höchsten ID suchst, geht das hier:

SELECT table.* FROM table
     WHERE table.id = (SELECT MAX(id) FROM table);

Hat prächtig funktioniert :slight_smile: Danke!

Hallo Ralf,

Hallo Edgar,

wenn Du denn Datensatz mit der höchsten ID suchst, geht das hier:

SELECT table.* FROM table
     WHERE table.id = (SELECT MAX(id) FROM table);

Hat prächtig funktioniert :slight_smile: Danke!

Hallo Christian,

Hallo Edgar,

dazu solltest du dich über die sog. Aggregatfunktionen einlesen.

scheinbar ja :wink: Ich habe noch "Datenbanken für OOo 2.3 von Thomas Krumbein, da ist das aber nur der Assistentenmodus beschrieben, veraltet und nicht wirklich brauchbar!

http://www.1keydata.com/de/sql/sql-funktionen.php

Gute Seite Danke.

Im Abfrageeditor von Base gibt es zu jeder Spalte die Möglichkeit zum
Gruppieren und dazu kannst du angeben welche Aggregatfunktion angewendet
werden soll, du brauchst also nicht unbedingt einen SQL-Befehl zu scheiben.

Ehrlich gesagt hat ich damit erfolglos experimentiert. Die Aggregatfunktionen war mir schon auch verblasst im Hinterkopf.

Wie Ralf bereits richtig beschrieben hat, brauchst du auf der ID-Spalte
die Aggregatfunktion MAX().

Naja, wie gesagt, ich bekam damit nicht das gewünschte Ergebnis.
Das nachträgliche Einbauen der kleinen SQL-Sequenz war da deutlich einfacher und schneller erledigt.

Nochmals Danke an alle. Werde mir jetzt unbedingt mal das BASE-Handbuch von der LO-Seite herunter laden :wink: