Hallo Leute,
ich bin noch relativ neu auf diesem Gebiet und bin gerade am verzweifeln. Ich habe eine Kundentabelle, die mit einer "Ereignis-Tabelle" verknüpft ist. Das Abfrageergebnis sollte alle Kunden anzeigen und das damit jeweils letzte verknüpfte Ereignis aus der zweiten Tabelle.
Versucht habe ich folgendes:
SELECT "KndBesuch".*, "Kunden".*
FROM "KndBesuch", "Kunden"
WHERE "KndBesuch"."KndIDX" = "Kunden"."ID"
ORDER BY "KndBesuch"."Datum" DESC LIMIT 1
Das liefert mir allerdings nur eine Zeile mit dem letzten Datum. Eigentlich sollten hier aber alle Kunden angezeigt werden, mit dem jeweils letzten Ereignis. Wo mache ich hier einen Denkfehler?
Abfragen
Moderator: Moderatoren
Re: Abfragen
Hallo tdatetime,
das Limit hats Du selbst gesetzt: LIMIT 1 bedeutet, dass nur ein Datensatz (der erste) angezeigt wird.
Du willst die Kunden, deren Datum jeweils das höchste ist? Dazu musst Du zuerst einmal das Maximale Datum in Abhängigkeit von einem Kunden ermitteln.
Damit könntest Du Dir jetzt eine korrelierende Unterabfrage zusammenstellen.
Vielleicht postest Du einmal hier Deine DB mit ein paar Dummydaten.
Gruß
Robert
das Limit hats Du selbst gesetzt: LIMIT 1 bedeutet, dass nur ein Datensatz (der erste) angezeigt wird.
Du willst die Kunden, deren Datum jeweils das höchste ist? Dazu musst Du zuerst einmal das Maximale Datum in Abhängigkeit von einem Kunden ermitteln.
Code: Alles auswählen
SELECT MAX("Datum"), "KndIDX" FROM "KndBesuch" GROUP BY "KndIDX"
Vielleicht postest Du einmal hier Deine DB mit ein paar Dummydaten.
Gruß
Robert
Re: Abfragen
Hallo Robert,
danke schon mal dass für deine Info. Angezeigt bekomme ich, wie du auch gesagt hast, nur einen einzigen Datensatz. Jedoch den mit dem höchsten "Datumswert".
Ich hab die Datenbank mal angehängt, gefüllt mit ein paar Daten.
Grundsätzlich sollen alle Kunden angezeigt werden, mit dem jeweils letzten Besuchsergebnis. Probiert habe ich schon einiges. Jedoch war das Ergebnis immer ein Syntax-Fehler.
Gruß
tdatetime (Peter)
danke schon mal dass für deine Info. Angezeigt bekomme ich, wie du auch gesagt hast, nur einen einzigen Datensatz. Jedoch den mit dem höchsten "Datumswert".
Ich hab die Datenbank mal angehängt, gefüllt mit ein paar Daten.
Grundsätzlich sollen alle Kunden angezeigt werden, mit dem jeweils letzten Besuchsergebnis. Probiert habe ich schon einiges. Jedoch war das Ergebnis immer ein Syntax-Fehler.
Gruß
tdatetime (Peter)
- Dateianhänge
-
- NListe.odb
- (21.59 KiB) 174-mal heruntergeladen
Re: Abfragen
Hallo Peter,
versuche einmal die folgende Abfrage:
Durch den Alias für die Tabelle "KndBesuch" kannst Du innerhalb der Abfrage auf entsprechende Zeilen der Abfrage zugreifen. Das wird in der Unterabfrage für den größten Datumswert genutzt.
Gruß
Robert
versuche einmal die folgende Abfrage:
Code: Alles auswählen
SELECT "a".*, "Kunden".* FROM "KndBesuch" AS "a", "Kunden"
WHERE "a"."KndIDX" = "Kunden"."ID" AND "a"."Datum" = (SELECT MAX("Datum") FROM "KndBesuch" WHERE "KndIDX" = "a"."KndIDX")
ORDER BY "a"."Datum" DESC
Gruß
Robert
Re: Abfragen
Hallo Robert,
vielen herzlichen Dank für die Zeilen. Das funktioniert sehr gut. Allerdings habe ich "Datum" durch "ID" ersetzt um zu vermeiden, dass ein Kunde doch noch zweimal aufgelistet wird. Denn es kann sein, dass ein Kunde zweimal am selben Tag besucht wird und somit auch die Uhrzeit berücksichtigt werden soll. Da zum Beispiel der zweite Termin am selben Tag immer eine höhere ID hat, erschien mir das am sinnvollsten.
SELECT "Kunden".*, "a".* FROM "KndBesuch" AS "a", "Kunden"
WHERE "a"."KndIDX" = "Kunden"."ID" AND "a"."ID" = (SELECT MAX("ID") FROM "KndBesuch" WHERE "KndIDX" = "a"."KndIDX")
ORDER BY "Kunden"."Strasse" ASC And "Kunden"."Haus-Nr" <- Syntax-Fehler
Das Sortieren nach Straßen funktioniert auch ganz gut. Jedoch habe ich dann ein Problem, diese auch nach der Hausnummer zu sortieren. Da bekomme ich einen Fehler gemeldet.
Allerdings muss ich gestehen, dass ich die Zusammenhänge, wie du zu dem Ergebnis gekommen bist, erst einmal nachvollziehen muss. Denn ganz verstanden habe ich es noch nicht. - Wie gesagt, ich bin in SQL ein absoluter Beginner.
Nochmals Danke
LG Peter
vielen herzlichen Dank für die Zeilen. Das funktioniert sehr gut. Allerdings habe ich "Datum" durch "ID" ersetzt um zu vermeiden, dass ein Kunde doch noch zweimal aufgelistet wird. Denn es kann sein, dass ein Kunde zweimal am selben Tag besucht wird und somit auch die Uhrzeit berücksichtigt werden soll. Da zum Beispiel der zweite Termin am selben Tag immer eine höhere ID hat, erschien mir das am sinnvollsten.
SELECT "Kunden".*, "a".* FROM "KndBesuch" AS "a", "Kunden"
WHERE "a"."KndIDX" = "Kunden"."ID" AND "a"."ID" = (SELECT MAX("ID") FROM "KndBesuch" WHERE "KndIDX" = "a"."KndIDX")
ORDER BY "Kunden"."Strasse" ASC And "Kunden"."Haus-Nr" <- Syntax-Fehler
Das Sortieren nach Straßen funktioniert auch ganz gut. Jedoch habe ich dann ein Problem, diese auch nach der Hausnummer zu sortieren. Da bekomme ich einen Fehler gemeldet.
Allerdings muss ich gestehen, dass ich die Zusammenhänge, wie du zu dem Ergebnis gekommen bist, erst einmal nachvollziehen muss. Denn ganz verstanden habe ich es noch nicht. - Wie gesagt, ich bin in SQL ein absoluter Beginner.
Nochmals Danke
LG Peter