Hallo,
>
1 | SELECT KOMMENTAR FROM TABELLE WHERE DATUM = (SELECT MAX(DATUM) FROM
|
2 | > TABELLE)
|
Dies ist bei Firebird die schnellste Möglichkeit an das Datum und den
Kommentar zukommen, wenn auf das Datum ein Index liegt. Dann spielen die
dahinter liegenden Datenmengen keine Rolle mehr.
> oder mittels GROUP BY:
>
1 | SELECT KOMMENTAR, MAX(DATUM) FROM TABELLE GROUP BY KOMMENTAR
|
>
Diese Variante kann nur verwendet werden, wenn KOMMENTAR keine BLOB ist,
wird aber wahnsinnig langsam, weil auf KOMMENTAR wahrscheinlich kein
Index liegen würde. Hinzu kommt, dass die Wahrscheinlichkeit das der
Optimizer hier zu schlagen eher gering ist.
Aber auch bei der ersten Variante gibt es das Problem, wenn Du nur den
letzten Kommentar zu einem Datum haben willst, dass Du bei zwei
Einträgen an einem Tag nicht unbedingt den letzten bekommen wirst.
Es sein denn, Dein Datum ist ein Timestamp, oder Deine Tabelle wird mit
einer zusätzlichen ID versehen die als primary key fungiert.
Ich würde die Variante mit der ID verwenden, da ich dann sicher bin,
dass der Datensatz mit der größten ID auch den letzten Kommentar
enthält.
Das Füllen der ID kann über einen BEFOREINSERT-Trigger auf der Datenbank
direkt erfolgen. Ich nutze dazu die Firebird Funktion GEN_ID in
Verbindung mit einem Generator.
1 | SELECT KOMMENTAR FROM TABELLE WHERE ID = ( SELECT MAX(ID) FROM TABELLE )
|
Wichtig bei dieser Variante ist, das das Feld ID unbedingt PRIMARYKEY
sein muss und vom Typ INTEGER, dann erreichst Du auch bei größten
Datenmengen beste Performance.
Gruß
Frank