![]() |
![]() |
|
|
|||||||
| Programmierung Rat & Tat für Programmierer |
![]() |
|
|
Themen-Optionen | Ansicht |
|
|
#1 |
|
Jr. Member
![]() Registriert seit: 26.01.2002
Ort: Wien
Alter: 45
Beiträge: 87
|
Hallo liebe Foren-Teilnehmer!
Ich steh bei einem Problem mit SQL/MS Access irgendwie auf der Leitung und hoffe, dass ihr mir bei einer (sicherlich einfachen) Aggregatfunktion helfen könnt. Ausgangslage: Ich habe eine Tabelle „tblKunden“ mit einer Schlüsselspalte „IDKunde“ und dem Namen der Kunden: Code:
tblKunden -------------- IDKunde: Integer VollerName: String Weiters gibt es eine Tabelle „tblKontostand“, in der zu jedem Kunden zu verschiedenen Daten ein Kontostand hinterlegt ist: Code:
tblKontostand -------------- IDKontostand: Integer (eindeutiger Bezeichner) Datum: Datum des Kontostands Kontostand: Höhe des Kontostands Ziel ---- Ich versuche nun, eine Abfrage/Sicht zu erhalten, bei der ich die KundenID, den Kundenname und den Kontostand zum letztmöglichen Datum erhalte. Also pro Kunde die Zeile: IDKunde, Vollername, Datum, Kontostand Irgendwie steh ich auf der Leitung, da alle meine Gruppierungsversuche in SQL scheitern… Mich würde es sehr freuen, wenn mir jemand helfen könnte! Vielen Dank im Voraus, webwurm |
|
|
|
|
|
#2 |
|
Aussteiger
![]() |
Nach deiner Angabe fehlt in der Kontostands-Tabelle die Referenz zum Kunden
. Ich gehe beim folgenden Statement aber davon aus, dass der Fremdschlüssel IDKunde bei jedem Konto vorhanden ist. Außerdem beziehe ich die Möglichkeit mit ein, dass es zu einem Kunden mehrere Konten geben kann (nicht so unüblich ).Code:
select kd.IDKunde,
kd.VollerName,
ko.Datum,
ko.Kontostand
from tblKunden kd,
tblKontostand ko
where ko.IDKunde = kd.IDKunde
and ko.Datum = (select max(ko2.Datum)
from tblKontostand ko2
where ko2.IDKunde = kd.IDKunde
and ko2.IDKontostand = ko.IDKontostand
)
;
Disclaimer: Diese Abfrage sollte ANSI-SQL sein und auch unter Access funktionieren. Unter Oracle geht sie definitiv.
____________________________________
Praktizierender Eristiker No hace falta ser un genio para saber quién dijo eso. Der wirklich faule Mensch ist oft extrem fleißig, denn er will möglichst schnell wieder faul sein. |
|
|
|
|
|
#3 |
|
Inventar
![]() |
Code:
select kd.IDKunde,
kd.VollerName,
ko.Datum,
ko.Kontostand
from tblKunden kd,
tblKontostand ko
where ko.IDKunde = kd.IDKunde
and ko.Datum = (select ko2.Datum
from tblKontostand ko2
where ko2.IDKunde = kd.IDKunde
and ko2.IDKontostand = ko.IDKontostand
order by ko2.datum desc
fetch first 1 row only
)
;
pong
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug Nicht klicken! Erstposteralarm/Beschwerde/Kummerkasten Verplattet |
|
|
|
|
|
#4 |
|
Jr. Member
![]() Registriert seit: 26.01.2002
Ort: Wien
Alter: 45
Beiträge: 87
|
Vielen herzlichen Dank für die Antworten!
Den Fremdschlüssel gibt es natürlich - sorry... Ich habe es nun so umgesetzt: Code:
SELECT tblKunden.IDKunde, tblKunden.VollerName, tblKontostand.IDKontostand, tblKontostand.Datum, tblKontostand.Kontostand
FROM tblKunden INNER JOIN tblKontostand
ON tblKunden.IDKunde = tblKontostand.IDKunde
Where tblKontostand.Datum = DMAX("Datum", "tblKontostand", "IDKunde=" & tblKunden.IDKunde)
webwurm |
|
|
|
![]() |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|