Jörg: Query mysql

Beitrag lesen

Hallo Rolf,

Wenn ich 2 deiner Kinder sehe und dich frage, welches deiner Kinder Fußball spielt, und du antwortest: "das jüngste", dann weiß ich immer noch nicht, ob das jüngste bei den beiden dabei ist. Sprich: Ob ich den Fußballer sehe.

Der Knackpunkt ist: geht es um "deine Kinder" - also alle 3 - oder "diese Kinder" - also nur die beiden, die ich sehe.

Nach meiner Prämisse (also der WHERE-Bedingung) bekommst Du ausschließlich alle meine Kinder zu Gesicht. 😉

Aber ok

Jedwede Selektion endet mit der Bedingung, die zeitlicher Natur ist und mit dem jeweiligen Tag der Anwendung der Query endet.

D.h. am heutigen Tag ist eine Selektion von Aufträgen aus 2021, ohne die 2022er, nicht möglich.

Ganz genau so ist es.

Dann würde ich Dir vorschlagen:

SELECT a.KundenID,
       p.Name, p.Tel, p.Email,
       st.Firmenname, st.Strasse1, st.PLZ, st.Ort,
       a.letzter_auftrag
FROM
     (SELECT a1.kundenid, max(a1.auftragdatum) as letzter_auftrag
      FROM auftraege a1
      WHERE /* bedingung für Aufträge */
      GROUP BY a1.kundenid) a
JOIN
     kunden     k  ON k.kundenid=a.kundenid
JOIN
     stammdaten st ON st.kundenid=a.kundenid

Der innere SELECT liefert die nötigen Kunden-IDs sowie die zugehörige jüngste Auftragsnummer im selektierten Zeitraum. Der GROUP BY sorgt dafür, dass an dieser Stelle eine KundenID nur einmal entsteht.

Kunden- und Stammdaten werden danach erst dazugeJOINt.

Oh, welch wunderschöne Query.
Ja, zugegeben, darauf wäre ich nicht gekommen. 👍
Muss aber anmerken, dass sie natürlich niemals laufen würde, weil Du anstelle des LEFT JOINS auf die Personentabelle die Kundentabelle 2 x dazu innerjoinst. Aber das ist egal, ich weiß, was Du meinst und kann das für mich dann schon so umsetzen, dass sie laufen wird. Leider sitze ich grad am falschen Rechner, aber ich geb Dir später oder morgen Rückmeldung, ob sie auch das ausspuckt, was ich gerne hätte. Aber ein von der Logik her sollte sie passen.

WÄREN Abfragen "2020-2021" möglich gewesen und du hättest als jüngsten Auftrag den aus 2022 sehen wollen, hätte man den separat in einem Subselect ermitteln müssen.

Ist in meinem Fall nicht nötig, weil, wie gesagt immer bis zum Tag der Query gefragt wird.

Vielen Dank für Deine Hilfe.👍

Jörg