2017-07-24 1 views
0

Mein CMS speichert Seiten mit ihren früheren Versionen in derselben Tabelle. Ich möchte die neueste Version jedes Datensatzes durch productID extrahieren. Für:Wählen Sie die Datensätze mit dem höchsten Wert für jede Gruppe aus

productID version name text price etc etc 
ABC123  1.2 Fred Stuff 2.34 ... ... 
DEF456  0.3 Jill Other 1.99 ... ... 
ABC123  1.3 Fred Stuff 2.99 ... ... 
DEF456  0.4 Jill Other 2.50 ... ... 
ABC123  1.4 Fred Stuff 3.45 ... ... 

muss ich bekommen:

ABC123  1.4 Fred Stuff 3.45 ... ... 
DEF456  0.4 Jill Other 2.50 ... ... 

(beliebige Reihenfolge). Ich habe experimentiert mit Variationen auf

select distinct(version),* group by productID,max(version) from table; 

aber ich kann nicht herausfinden, wie es geht. Die anderen Antworten für "Select Highest" beziehen sich auf Zählungen und Summen; Ich brauche nur ganze Platten.

+0

https://stackoverflow.com/questions/4510185/select-max-value-of-each-group –

+0

https://stackoverflow.com/questions/12102200/get-records-with-max- Wert für jede Gruppe gruppierter SQL-Ergebnisse –

Antwort

0

Kreuz würde großes Nehmen, außer dies ist mySQL ... so

benötigen Sie einen Satz von Daten zu erzeugen, die den logischen Schlüssel für die Tabelle enthält und der Maximalwert der Sie interessiert. Dann kommen zurück zum Basissatz.

So SELECT max(version) mv, productID from table group by productID bekommt uns die max-Version für jede Produkt-ID und dann können wir es wieder auf die Basis setzen, um die anderen benötigten Daten zu erhalten.

SELECT * 
FROM Table A 
INNER JOIN (SELECT max(version) mv, productID 
      FROM table 
      GROUP BY productID) B 
on A.ProductID= B.ProductID 
and A.Version = B.MV 
Verwandte Themen