Hallo zusammen,
am Besten geht es am Beispiel.
Meine Ursprungstabelle:
IDProjektlaufzeit datErstellt lngIDProjekte
1 01.11.2014 1
2 02.11.2014 1
3 03.11.2014 5
4 04.11.2014 5
5 04.11.2014 5
7 06.11.2014 1
Nach einer SQL-Abfrage soll das Ergebnis so aussehen:
IDProjektlaufzeit datErstellt lngIDProjekte
4 04.11.2014 5
5 04.11.2014 5
7 06.11.2014 1
In Worten:
Für jeden Wert im Feld "lngIDProjekt" soll geprüft werden, welcher Datensatz das jüngste Datum enthält. Im Beispiel ist hier der jüngste Datensatz für das Projekt "1" der Datensatz mit der IDProjektlaufzeit 7.
Könnt ihr mir da behilflich sein? Wie kann die SQL-Abfrage aussehen?
Danke und mfg, Florian
Hallo,
etwa so:
select max(datErstellt), lngIDProjekte from Ursprungstabelle Group by lngIDProjekte
Hallo,
danke. Das ist noch nicht genau das, was ich brauche.
Bei der vorgeschlagenen Abfrage lautet das Ergebnis
datErstellt lngIDProjekte
04.11.2014 5
06.11.2014 1
Die Satzensätze werden also gruppiert und deshalb ist nicht mehr ersichtlich, welcher Datensatz das ist.
Ich brauche aber einen eindeutigen Datensatz, deshalb habe ich die Tabelle noch um eine Zeit erweitert:
IDProjektlaufzeit datDatErstellt datZeitErstellt lngIDProjekte
1 01.11.2014 12:00:00 1
2 02.11.2014 13:00:00 1
3 03.11.2014 14:00:00 5
4 04.11.2014 15:00:00 5
5 04.11.2014 16:00:00 5
6 06.11.2014 17:00:00 1
(zur Info: Die Tabelle enthält in Wirklichkeit weitere Spalten)
Das Ergebnis soll nun so aussehen:
IDProjektlaufzeit datDatErstellt datZeitErstellt lngIDProjekte
5 04.11.2014 16:00:00 5
6 06.11.2014 17:00:00 1
Habt ihr eine Idee für eine passende SQL-Abfrage?
Danke! Florian
Der gezeigte Weg war schon richtig. Man muss nur nach der Berechnung (Max pro ID) die übrigen Daten hinzuverknüpfen:
SELECT
A.*
FROM
Ursprungstabelle AS A
INNER JOIN
(
SELECT
lngIDProjekte,
MAX(datDatErstellt + datZeitErstellt) AS MaxZP
FROM
Ursprungstabelle
GROUP BY
lngIDProjekte
) AS B
ON A.lngIDProjekte = B.lngIDProjekte
AND
A.datDatErstellt = B.datDatErstellt
AND
A.datZeitErstellt = B.datZeitErstellt
Hallo,
danke schon mal!
Die Abfrage funktioniert noch nicht, weil die Felder "B.datZeitErstellt" und "B.datDatErstellt" in der erzeugten Tabelle B gar nicht existieren. Hinzufügen kann ich sie auch nicht, weil dann die Fehlermeldung "Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck 'datZeitErstellt' nicht als Teil der Aggregatfunktion einschließt".
Hast du noch eine Idee, wie das zu lösen wäre?
Danke, Florian
Ach ja, es muss etwas anders verknüpft werden:
...
ON A.lngIDProjekte = B.lngIDProjekte
AND
A.datDatErstellt + A.datZeitErstellt = B.MaxZP
Hier im Anwendungsfall wäre es günstiger, wenn Datum und Zeit gleich in einem Tabellenfeld zusammengefasst wären, weil sich dann in der Abfrage eine Nutzung eines Index auf das Feld ergeben kann.
Ah, danke, so funktioniert es!
Ich habe nach deinem Vorschlag Datum und Zeit in einem Feld zusammengefasst, auch das funktioniert einwandfrei.