SQL-Server/Sicht erstellen nur mit Maximalwerten

Hallo zusammen!

Ich hbae irgendwie ein Problem mit der richtigen Erstellung einer Sicht. Ziel ist es, eine Sicht auf eine Tabelle zu erstellen, in welcher zu verschiedenen Werten jeweils gleiche Datensätze existieren. Unterscheiden kann man jedoch nach dem Anlagedatum. Innerhalb der Sicht sollen nun nur alle DS mit dem jeweiligen maximalen Datum erscheinen.

Jahr|Monat|KST|KA|Datum|Betrag
2010|01|100|2524|01.01.2009|0.00
2010|01|200|2524|01.01.2009|0.00
2010|01|200|2524|01.02.2009|1.00
2010|01|200|2524|01.03.2009|0.50
2010|01|300|2524|01.01.2009|1.00
2010|01|300|2524|01.04.2009|5.00

gewünschtes Ergebnis:
(Aus jeder vorhandenen Kombination kommt nur der jeweilige DS mit dem maximalen Datum)

Jahr|Monat|KST|KA|Datum|Betrag
2010|01|100|2524|01.01.2009|0.00
2010|01|200|2524|01.03.2009|0.50
2010|01|300|2524|01.04.2009|5.00

Die Teilbeträge sollen dann in einem weiteren Schritt summiert werden. Beispielsweise nach Jahr/Monat/KST.

Mit meinen Versuchen komme ich leider nicht weiter.

SELECT Jahr, Monat, KST, KA, Betrag, MAX(Datum) AS MaxDatum
FROM Tabelle
GROUP BY Jahr, Monat, KST, KA, Betrag
ORDER BY Jahr, Monat, KST, KA

Die DB liegt auf einem MS SQL Server 2000. Ich würde mich sehr freuen, wenn mir jemand weiter helfen könnte.

Vielen Dank!

Hallo blechschneider,

fast richtig:

SELECT Jahr, Monat, KST, KA, MAX(Datum) AS MaxDatum
 FROM Tabelle
 GROUP BY Jahr, Monat, KST, KA
;

erzeugt als Unterquery die Maximalwerte und jetzt must Du nur noch die entsprechenden Werte dazu heraus suchen

SELECT a.Jahr, a.Monat, a.KST, a.KA, a.Betrag, a.Datum 
 FROM Tabelle A,
 (SELECT Jahr, Monat, KST, KA, MAX(Datum) AS MaxDatum
 FROM Tabelle
 GROUP BY Jahr, Monat, KST, KA
 ) B
 WHERE a.jahr = b.jahr
 AND a.Monat= b.Monat
 AND a.KST = b.kst
 and a.datum= b.datum
;

Ohne Test :smile:

MfG Georg V.

Klingt sehr gut - Vielen Dank Georg. Ich werde mir das morgen mal anschauen und mich hier wieder melden.

Hallo Georg,

vielen Dank für die schnelle Unterstützung! Mit Deinem „Denkanstoß“ habe ich es geschafft.

SELECT a.Jahr, a.Monat, a.Kostenart, a.Kostenstelle, SUM(a.Betrag) AS Summe
FROM Tabelle a INNER JOIN
 (SELECT Jahr, Monat, Kostenart, Kostenstelle, Produkt, Teilprodukt, MAX(Datum) AS MaxDatum
 FROM Tabelle
 GROUP BY Jahr, Monat, Kostenart, Kostenstelle, Produkt, Teilprodukt) b ON a.Jahr = b.Jahr AND a.Monat = b.Monat AND 
 a.Kostenart = b.Kostenart AND a.Kostenstelle = b.Kostenstelle AND a.Produkt = b.Produkt AND a.Teilprodukt = b.Teilprodukt AND 
 a.Datum = b.MaxDatum
GROUP BY a.Jahr, a.Monat, a.Kostenart, a.Kostenstelle