SQL Gruppierung

Alkor35

Ensign
Registriert
Aug. 2004
Beiträge
134
Hallo,

Ich möchte nun Pro Artikelnummer die höchste BelegID haben mit dem dazugehörigen Preis. Wie lautet hierzu der MS SQL 2005 Befehl?
Anbei ein sehr vereinfachtes Beispiel:

Belege
BelegID | Artikelnummer | EinzelpreisMenge
1 | 123 | 1,50 | 10
2 | 123 | 2,00 | 1
3 | 456 | 1,00 | 5

Select max(BelegID) as BelegID, Artikelnummer, Einzelpreis
From Belege
Group By Artikelnummer, Einzelpreis

Ergibt:
BelegID | Artikelnummer | Einzelpreis
1 | 123 | 1,50
2 | 123 | 2,00
3 | 456 | 1,00

Ich brauche aber:
BelegID | Artikelnummer | Einzelpreis
2 | 123 | 2,00
3 | 456 | 1,00

Warum das Auftritt ist klar (Group By über den Einzelpreis) aber welchen Befehl gibt es stattdesen damit der max Befehl noch funktioniert?
 
Nimm 2 SQL Befehle... erst das group by ohne preis und dann mit einem left join den preis holen über BelegID
 
Versuchs mal damit:

Select MAX(BelegID), Artikelnummer, MAX(Einzelpreis)
From Belege
Group By Artikelnummer

Bei mir kommt dann das raus:

MAX ( BELEGID ) ARTIKELNUMMER MAX ( EINZELPREIS )
2 | 123 | 2,00
3 | 456 | 1,00
 
Zuletzt bearbeitet:
Select MAX(BelegID), Artikelnummer, MAX(Einzelpreis)
From Belege
Group By Artikelnummer

Damit stimmt aber die Zuordnung von Preis zu Beleg nur, wenn der Preis der höchsten Beleges auch der höchste war, sonst ist die Aussage Müll... also besser lassen!
 
Habe es wie Vorschgeschlagen mit 2 SQL Abfragen gelöst. Es funktioniert. Danke :)
 
Das kann man prinzipiell auch wunderbar in einem einzelnen Query machen..
SELECT BelegID, Artikelnummer, Einzelpreis
FROM Belege
WHERE BelegID IN (SELECT MAX(BelegID) FROM Belege GROUP BY Artikelnummer)
 
Thx IceMatrix,

genau das hatte ich gesucht, an Unterabfragen hatte ich gar nicht gedacht:p
 
Zurück
Oben