2010-12-22 16 views
57
Name Value AnotherColumn 
----------- 
Pump 1 8000.0 Something1 
Pump 1 10000.0 Something2 
Pump 1 10000.0 Something3 
Pump 2 3043 Something4 
Pump 2 4594 Something5 
Pump 2 6165 Something6 

Meine Tabelle sieht in etwa so aus. Ich würde gerne wissen, wie man den maximalen Wert für jede Pumpe wählt.Wählen Sie den maximalen Wert jeder Gruppe

select a.name, value from out_pumptable as a, 
(select name, max(value) as value from out_pumptable where group by posnumber)g where and g.value = value 

Dieser Code erledigt den Job, aber ich bekomme zwei Einträge von Pumpe 1, da es zwei Einträge mit demselben Wert hat.

Antwort

6
SELECT 
    b.name, 
    MAX(b.value) as MaxValue, 
    MAX(b.Anothercolumn) as AnotherColumn 
FROM out_pumptabl 
INNER JOIN (SELECT 
       name, 
       MAX(value) as MaxValue 
      FROM out_pumptabl 
      GROUP BY Name) a ON 
    a.name = b.name AND a.maxValue = b.value 
GROUP BY b.Name 

Beachten Sie, dass dies viel einfacher wäre, wenn Sie einen Primärschlüssel hätten. Hier ist ein Beispiel

SELECT * FROM out_pumptabl c 
WHERE PK in 
    (SELECT 
     MAX(PK) as MaxPK 
    FROM out_pumptabl b 
    INNER JOIN (SELECT 
        name, 
        MAX(value) as MaxValue 
       FROM out_pumptabl 
       GROUP BY Name) a ON 
     a.name = b.name AND a.maxValue = b.value) 
+0

Ah, dang. Ich habe das Beispiel zu einfach gemacht. Es gibt mehr Spalten die Tabelle, die es ein wenig kompliziert machen>. < –

+0

Wenn es mehr Spalten gibt, fügen Sie sie einfach in die Auswahl –

+0

Kannst du die Spalten näher erläutern. Wonach versuchst du zu gruppieren? –

130
select name, max(value) 
from out_pumptable 
group by name 
+7

Irgendein Grund für den Downvote (fast 2 Jahre später?) –

+21

Aber das funktioniert nicht auf Postgres oder anderen RDBMS mit strikter 'GROUP BY'. In striktem 'GROUP BY' muss jede Spalte in Ihrem' SELECT' entweder in Ihrer 'GROUP BY' erscheinen oder in einer Aggregatfunktion verwendet werden. – NickAb

+1

Was bedeutet, dass es im Grunde funktioniert mit MySQL und gut, MySQL ... – Craig

-2
SELECT DISTINCT (t1.ProdId), t1.Quantity FROM Dummy t1 INNER JOIN 
     (SELECT ProdId, MAX(Quantity) as MaxQuantity FROM Dummy GROUP BY ProdId) t2 
    ON t1.ProdId = t2.ProdId 
    AND t1.Quantity = t2.MaxQuantity 
ORDER BY t1.ProdId 

dies wird Ihnen die Idee.

1
select name, value 
from(select name, value, ROW_NUMBER() OVER(PARTITION BY name ORDER BY value desc) as rn 
from out_pumptable) as a 
where rn = 1 
Verwandte Themen