SQL-Abfrage für mich nicht lösbar

07/07/2008 - 15:20 von Walter Sporn | Report spam
Hallo!

Ich hab eine Tabelle mit folgenden Feldern (vereinfacht):

[Primàrschlüssel_Laufindex]
[ReferenzID_1]
[ReferenzID_2]
[Datum]
[Wert]

Ich muss eine Abfrage dafür basteln, an der ich schon seit Tagen verzweifelt
hànge.
Und zwar muss ich zunàchst alle Records nach [ReferenzID_1] und
[ReferenzID_2] gruppieren. Also die Kombination aus beiden Spaltenwerten
darf jeweils nur einmal im Ergebnis vorkommen. Und das zweite Kriterium ist
das [Datum]. Bei der Gruppierung muss praktisch derjenige Record übrig
bleiben, der das höchte [Datum] hat.
Und am Schluss will ich den [Wert] mit im Ergebnis stehen haben.

Wenn ich das so schreibe

SELECT ReferenzID_1, ReferenzID_2
FROM dbo.Tabelle
GROUP BY ReferenzID_1, ReferenzID_2, Datum
ORDER BY Datum DESC

dann schließe ich das [Datum] fàlschlicherweise mit in die Gruppierung ein.
Wenn ich das Datum bei der Gruppierung weglasse, dann meckert der
SQL-Parser, weil das [Datum] der Sortierung bei der Aggregatfunktion
"Gruppierung" fehlt. Außerdem krieg ich den [Wert] nicht mit in die Abfrage,
weil der ja auch gleichzeitig in der Gruppierung auftauchen muss.

Ich habs auch mit Unterabfragen probiert, alles ohne Erfolg. Kann mir jemand
helfen?

Schöne Grüße und schon mal Danke von einem, der leider noch nicht sehr viel
SQL-Erfahrung hat...
 

Lesen sie die antworten

#1 Henry Habermacher
07/07/2008 - 15:41 | Warnen spam
Hallo Walter

"Walter Sporn" wrote in message
news:
SELECT ReferenzID_1, ReferenzID_2
FROM dbo.Tabelle
GROUP BY ReferenzID_1, ReferenzID_2, Datum
ORDER BY Datum DESC

dann schließe ich das [Datum] fàlschlicherweise mit in die Gruppierung
ein.
Wenn ich das Datum bei der Gruppierung weglasse, dann meckert der
SQL-Parser, weil das [Datum] der Sortierung bei der Aggregatfunktion
"Gruppierung" fehlt. Außerdem krieg ich den [Wert] nicht mit in die
Abfrage,
weil der ja auch gleichzeitig in der Gruppierung auftauchen muss.




Falls es zu ReferenzID_1 und _2 mehr als 1 Datum gibt, willst Du das
jüngste. Ist das richtig?
Falls ja, versuch mal folgendes:
SELECT ReferenzID_1, ReferenzID_2, MAX(Datum) AS DasDatum
FROM dbo.Tabelle T
GROUP BY ReferenzID_1, ReferenzID_2

Das Max darfst Du auch brauchen, wenn Du sicher bist, dass da nur 1 Datum
vorkommen kann.
Mit diesen "Schlüsseln" kannst Du nun den Wert ermitteln. (ungetestet aus
dem Bauch)

SELECT ReferenzID_1, ReferenzID_2, MAX(Datum) AS DasDatum
(SELECT WERT FROM dboTabelle Tw
WHERE Tw.ReferenzID_1 = T.ReferenzID_1
AND Tw.ReferenzID_2 = T.ReferenzID_2
AND Tw.Datum = T.DasDatum) As DerWert
FROM dbo.Tabelle T
GROUP BY ReferenzID_1, ReferenzID_2

Gruss
Henry


Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com

Ähnliche fragen