Abfragen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

tdatetime
Beiträge: 3
Registriert: So, 17.06.2018 23:57

Abfragen

Beitrag von tdatetime » Mo, 18.06.2018 00:16

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?

RobertG
*******
Beiträge: 1711
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfragen

Beitrag von RobertG » Mo, 18.06.2018 17:18

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.

Code: Alles auswählen

SELECT MAX("Datum"), "KndIDX" FROM "KndBesuch" GROUP BY "KndIDX"
Damit könntest Du Dir jetzt eine korrelierende Unterabfrage zusammenstellen.

Vielleicht postest Du einmal hier Deine DB mit ein paar Dummydaten.

Gruß

Robert

tdatetime
Beiträge: 3
Registriert: So, 17.06.2018 23:57

Re: Abfragen

Beitrag von tdatetime » Di, 19.06.2018 06:49

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)
Dateianhänge
NListe.odb
(21.59 KiB) 31-mal heruntergeladen

RobertG
*******
Beiträge: 1711
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfragen

Beitrag von RobertG » Di, 19.06.2018 08:00

Hallo Peter,

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
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

tdatetime
Beiträge: 3
Registriert: So, 17.06.2018 23:57

Re: Abfragen

Beitrag von tdatetime » Di, 19.06.2018 23:25

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

Antworten