group by Problem

Okay nur mit tbl_scan ist das erstmal einfach. Du suchst im Prinzip:
Code:
SELECT t1.*,t2.stellplatz
FROM (

select a.Fahrgestellnummer, Max(a.ScanID) AS max_scanID
from tbl_scan a
group by a.Fahrgestellnummer

) t1
LEFT JOIN tbl_scan t2
ON t1.fahrgestellnummer = t2.fahrgestellnummer
AND t1.max_scanID = t2.scanID
Die Variante ist etwas unelegant aber funktioniert eigentlich immer weil old school SQL.

Eventuell kann dein MySQL auch Window-Functions wie ROW_NUMBER(), damit würde man vielleicht lieber arbeiten wollen weil es etwas übersichtlicher und einfacher ist. Allerdings kann Access das definitiv nicht, da müsste man dann vielleicht eine View in MySQL anlegen und die in Access ausgeben, das könnte gehen:
Code:
SELECT *
FROM (

select a.Fahrgestellnummer, a.ScanID, a.Stellplatz,
ROW_NUMBER() OVER (PARTITION BY a.Fahrgestellnummer ORDER BY a.ScanID DESC) AS zeile
from tbl_scan a

) t
WHERE t.zeile = 1
 
Werbung:
Vielen Dank.
Genau das was ich wollte.
Und habe es mit meiner Abruf liste gejoint:

So passt es jetzt:

Code:
SELECT a.Fahrgestellnummer, a.DatenID, t.ScanID, t.Stellplatz, t.zeile
FROM tbl_abruf a
Left Join 
(
select a.Fahrgestellnummer, a.ScanID, a.Stellplatz,
ROW_NUMBER() OVER (PARTITION BY a.Fahrgestellnummer ORDER BY a.ScanID DESC) AS zeile
from tbl_scan a
) t on a.Fahrgestellnummer = t.Fahrgestellnummer
WHERE t.zeile = 1
 
Habe den obigen code in eine Prozedur gepackt und kann die dann wunderbar als Datenherkunft im Frontend verwenden.

Nochmals Danke an alle für Eure Hilfe!!
 
Focus, Dieses Problem habe ich auch.
Das Problem ist ganz simpel, die Lösung scheint kompliziert.

Bei mir betrifft das auch nur eine Relation (Veranstaltungen).

Darin steht vereinfacht VeranstaltungsID, SchulungstypID und VeranstaltungsDATUM.

Relation Veranstaltungen n:1 Schulungen

Ich benötige aus einer Gruppe von Veranstaltungen über alle Schulungstypen immer nur die Veranstaltung des jüngsten Datum.

SELECT VeranstaltungsID, MAX(VeranstaltungsDATUM) As DatumDurchfuehrung FROM Veranstaltungen GROUP BY SchulungstypID.

Bekanntlich kommt dann die Fehlermeldung, dass "VeranstaltungsID", welches ja im Resultset aufgeführt werden soll, nicht Bestandteil der Group Clause ist.

Also noch mal mit einer Beispiel Relation:

VeranstaltungsID SchulungstypID VeranstaltungsDATUM
1 2 12.01.2024
2 2 10.12.2022
3 3 09.01.2021
4 3 09.10.2024

Gewünscht wäre demnach im Resultset:

VeranstaltungsID DatumDurchfuehrung
1 12.01.2024
4 09.10.2024

Ich denke dass die Lösung auch meinem Vorschreiber hilft.

Hat jemand eine Idee?
LG Stephan
 
Ohne Angeben zu wollen ... ich glaub ich habe die Lösung ... aus lauter Rumprobieren:
Eine Sub-Query auf dieselbe Relation:

SELECT DISTINCT A.VA_ID FROM Teilnahmen AS A, (SELECT B.UW_ID, MAX(B.VA_DATUM) As MAX_DATUM
FROM Teilnahmen AS B GROUP BY B.UW_ID) AS C
WHERE A.UW_ID=C.UW_ID AND A.VA_DATUM=C.MAX_DATUM

LG
 
SELECT VeranstaltungsID, MAX(VeranstaltungsDATUM) As DatumDurchfuehrung FROM Veranstaltungen GROUP BY SchulungstypID.

Bekanntlich kommt dann die Fehlermeldung, dass "VeranstaltungsID", welches ja im Resultset aufgeführt werden soll, nicht Bestandteil der Group Clause ist.
Wenn das "bekanntlich" ist, dann mach es doch richtig.
Die Fehlermeldung sagt ja schon, was ihr fehlt: VeranstaltungsID ist nicht Bestandteil der Group Clause.

Die Faustregel für "Group By"- Abfragen lautet, alle Spalten in der Select Clause müssen entweder aggregiert sein oder gruppiert.
Also folgt man der Faustregel oder der Fehlermeldung wird aus Deinem SQL Statement:
Code:
SELECT VeranstaltungsID, MAX(VeranstaltungsDATUM) As DatumDurchfuehrung FROM Veranstaltungen GROUP BY SchulungstypID,VeranstaltungsID
Die Faustregel ist jetzt erfüllt, die Fehlermeldung sollte nicht mehr erscheinen.

Warum Du in Deinem Statement nach SchulungstypID gruppierst, ist (mir) unklar. Vielleicht auch besser einfach weglassen, dann haben wir:
Code:
SELECT VeranstaltungsID, MAX(VeranstaltungsDATUM) As DatumDurchfuehrung FROM Veranstaltungen GROUP BY VeranstaltungsID
 
P.S.: Diese Art von Gruppierung in Abfragen sind SQL Basics. Man sollte sich wirklich einfach mal ein paar Minuten Zeit nehmen und verstehen, was Group By macht, wie und warum man es einsetzt und durchaus auch, wie nicht man es nicht macht.
Am besten geht das mit 3 -5 selbstgebastelten Testdatensätzen, die man nach Herzenslust abfragt, gruppiert, editiert und so weiter.. solange bis man Group BY Abfragen formulieren kann, ohne dass sie einen Fehler produzieren und 2. Stufe, das ausgeben, was man haben wollte. Am besten man verwendet dazu kein mySQL, da schon Stufe 1 meist daran scheitert, dass mySQL falsche Abfragen 1. zulässt und 2.auch noch falsch beantwortet. Das ist für Anfänger harter Stoff, den man sich nicht freiwillig antuen sollte.
 
Werbung:
Zurück
Oben