Funktion "Letzter Wert" in Abfragen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

zummy
*
Beiträge: 18
Registriert: So, 18.02.2007 19:58

Funktion "Letzter Wert" in Abfragen

Beitrag von zummy »

Hallo,

ich versuche gerade, eine Access-Datenbank auf OOO-Base umstellen. Beim Programmieren einer Abfrage habe ich jedoch große Probleme.
Der von Access ausgegebene SQL-Code sieht so aus:

Code: Alles auswählen

SELECT Kontostand.Konto, Max(Kontostand.Datum) AS MaxvonDatum, Last(Kontostand.Kontostand) AS LetzterWertvonKontostand
FROM Kontostand
GROUP BY Kontostand.Konto;
Wenn ich den SQL-Code in OOO übernehme, kommt als Fehler beim Ausführen der Abfrage:
Access in denied: LAST in statement [...]
In der Entwurfsansicht kann ich die Abfrage auch nicht nachbauen, da die Funktion "Letzter Wert" - anders als in Access - nicht angeboten wird.

Ich möchte doch nur, dass der Wert in der Spalte "Kontostand" ausgegeben wird, der zum maximalen Datum gehört, also der aktuellste Wert. Wie kann ich das erreichen?

Danke schonmal!
Zummy
AndreasJBittner
*****
Beiträge: 473
Registriert: Fr, 09.10.2009 16:44
Wohnort: Bielefeld
Kontaktdaten:

Re: Funktion "Letzter Wert" in Abfragen

Beitrag von AndreasJBittner »

Hallo,

ersetze doch Last(XY) durch z. B. Max(ID), wenn Dein Last() auch den höchsten Wert hat.

Grüße
Andreas
LO 4.3
AMD Athlon 64 3700+, 2.21 GHz, 4 GB RAM, Win XP SP3
iMac 2 GHz, 16 GB RAM/MacBookPro, 8 GB RAM, Mac OS X 10.9.5
Intel Core2 Quad CPU Q6600 @ 2,4 GHz, 4 GB RAM, Suse 13.2

MySQL 5.1: Pentium III, 666 MHz, 512 MB, Suse 12.1
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Funktion "Letzter Wert" in Abfragen

Beitrag von Barlee »

Hallo Zummy,

da Du nur den Kontostand suchst, der dem max. Datum zugeordnet ist, kannst Du so vorgehen:

Code: Alles auswählen

SELECT Kontostand FROM Tabelle WHERE Datum = (SELECT MAX(Datum) FROM Tabelle)
Gruß Barlee
zummy
*
Beiträge: 18
Registriert: So, 18.02.2007 19:58

Re: Funktion "Letzter Wert" in Abfragen

Beitrag von zummy »

Hallo Barlee,

danke für deine Antwort! Jetzt bin ich schonmal einen Schritt weiter.
Ich möchte aber den neuesten Kontostand für jedes Konto ausgegeben konnte. In der Tabelle Kontostand stehen die Kontostände der Konten "bar", "Giro", "Sparbuch" usw. So bekomme ich aber nur den neuesten ausgegeben, unabhängig vom Konto.

Wenn ich eine Zeile

Code: Alles auswählen

GROUP BY Kontostand.KONTO;
anhänge, kommt aber wieder eine Fehlermeldung:
Not in aggregate function or group by clause: org.hsqldb.Expression@dabcea in statement [SELECT "KONTOSTAND" FROM "Kontostand" WHERE "DATUM" = ( SELECT MAX( "DATUM" ) FROM "Kontostand" ) GROUP BY "Kontostand"."KONTO"]
Wie kann ich denn hier diese Gruppierung hinbekommen?
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Funktion "Letzter Wert" in Abfragen

Beitrag von Barlee »

Hallo Zummy,

probier es mal in der Art. (auf die Schnelle und ungetestet)
"SQL direkt ausführen" sollte aktiviert sein.
Spaltenbezeichner, Tabellennamen usw. ggf. anpassen.

Code: Alles auswählen

SELECT 
"Tab_A"."KONTOSTAND",
"Tab_A"."KONTO",
"Tab_A"."DATUM"

FROM
(
SELECT 
"KONTOSTAND" ,
"KONTO",
"DATUM"
FROM "Kontostand" 
) "Tab_A",
(
SELECT MAX( "DATUM" ), "KONTO" FROM "Kontostand" GROUP BY "KONTO"
) "Tab_B"
WHERE "Tab_A"."KONTO" = "Tab_B"."KONTO"
AND "Tab_A"."DATUM" = "Tab_B"."DATUM"
Gruß Barlee
Antworten