2017-05-22 6 views
0

Ich habe zwei Tabellen A und B:größten Werte Get nur aus einer Tabelle

A:

id v1 
----- 
1 12 
2 9 (added after edit) 
2 11 
3 27  
3 23 

B:

id v2 
----- 
1 13 
3 10 
2 10  
3 28 

Ich mag jede Zeile von B wählen, wo v2 ist von allen v2 am größten, v1 entspricht der ID aus beiden Tabellen. (EDIT: Was ich meine: Zeigen Sie mir jede Zeile von B, die den einzigen Maximalwert für diese ID aus beiden Tabellen enthält).

Das Ergebnis sollte wie folgt aussehen:

id greatest (v1,v2) 
-------------------- 
1 13 
3 28 

Bisher ich in der Lage bin mit dem größten aus beiden Tabellen zu zeigen:

select distinct a.id, greatest(v1,v2) from a join b on a.id=b.id group by a.id; 

was dazu führt:

id greatest (v1,v2) 
-------------------- 
1 13 
2 11 
3 28  

Irgendwelche Ideen, wie man am besten (v1, v2) nur von B zeigt?

+0

So Teil der Kriterien ist, dass v2 größer als v1 sein muss (für die gleiche id) – Strawberry

+0

Ja. Ich werde die Frage bearbeiten, um das klarzustellen. –

+0

Ich verstehe. Sie möchten Zeilen, deren maximaler Wert kleiner oder gleich b ist. – Strawberry

Antwort

0

EDIT:

SELECT b.id 
    , MAX(v2) v2 
    FROM b 
    JOIN 
    (SELECT id 
      , MAX(v1) v1 
     FROM a 
     GROUP 
      BY id 
    ) x 
    ON x.id = b.id 
    AND x.v1 <= b.v2 
GROUP 
    BY id; 
+0

Danke für deine Antwort, aber das funktioniert noch nicht. Mein erstes Beispiel war schlecht, sorry dafür. Mit diesem Code bekomme ich auch Zeilen von b, wenn v2 größer als ein entsprechender Wert für die ID von a ist. Im aktualisierten Beispiel führt dies zu der Zeile (2, 10), die nicht im Ergebnis enthalten sein sollte. –

+0

@JanT. Siehe Bearbeiten - obwohl ich mir nicht 100% sicher bin, dass es richtig ist. – Strawberry

+0

Das funktioniert, danke! –

Verwandte Themen