Letzter Wert pro Kriterium

05/02/2010 - 09:22 von Lutz Uhlmann | Report spam
Hallo NG!

Ich glaube, das wurde schon mal behandelt, leider finde ich es nicht ...
sry!

Ich habe eine Archiv-Tabelle der Form
ID, Gruppe, Art, Datum, Menge, Preis

Nun möchte ich eine Abfrage die mir gruppiert nach Gruppe,Art das letzte
Datum und die dazugehörige Menge und den dazugehörigen Preis liefert:
Gruppe, Art, LDatum, LMenge, LPreis

Aus
1, 1, 1, 12.03.1999, 5, 14
2, 1, 2, 17.08.1999, 2, 11
3, 1, 1, 03.12.1987, 9, 13
4, 1, 1, 13.10.2004, 7, 15
5, 1, 2, 26.06.2001, 1, 10
6, 1, 2, 08.08.2003, 1, 9
7, 1, 1, 27.04.2000, 2, 13
soll
1, 1, 13.10.2004, 7, 15
1, 2, 08.08.2003, 1, 9
werden
 

Lesen sie die antworten

#1 Elmar Boye
05/02/2010 - 09:48 | Warnen spam
Hallo Lutz,

Lutz Uhlmann schrieb:
Ich habe eine Archiv-Tabelle der Form
ID, Gruppe, Art, Datum, Menge, Preis

Nun möchte ich eine Abfrage die mir gruppiert nach Gruppe,Art das letzte
Datum und die dazugehörige Menge und den dazugehörigen Preis liefert:
Gruppe, Art, LDatum, LMenge, LPreis



Du suchst OVER(PARTITION) mit ROW_NUMBER:
<URL:http://msdn.microsoft.com/de-de/lib...4.aspx>

Für Deine Daten:

CREATE TABLE dbo.ArchivTabelle (
id int NOT NULL PRIMARY KEY,
Gruppe int NOT NULL,
Art int NOT NULL,
Datum date NOT NULL,
Menge int NOT NULL,
Preis int NOT NULL);

INSERT INTO dbo.ArchivTabelle (id, Gruppe, Art, Datum, Menge, Preis)
VALUES
(1, 1, 1, '12.03.1999', 5, 14),
(2, 1, 2, '17.08.1999', 2, 11),
(3, 1, 1, '03.12.1987', 9, 13),
(4, 1, 1, '13.10.2004', 7, 15),
(5, 1, 2, '26.06.2001', 1, 10),
(6, 1, 2, '08.08.2003', 1, 9),
(7, 1, 1, '27.04.2000', 2, 13);

WITH ArchivCTE
AS
(
SELECT id, Gruppe, Art, Datum, Menge, Preis,
ROW_NUMBER() OVER(PARTITION BY Gruppe, Art ORDER BY Datum DESC) AS RowNumber
FROM dbo.ArchivTabelle
)
SELECT id, Gruppe, Art, Datum, Menge, Preis
FROM ArchivCTE
WHERE RowNumber = 1

Gruß Elmar

Ähnliche fragen