SQL RANK () über PARTITION für verknüpfte Tabellen
Ich habe zwei Tabellen RSLTS und CONTACTS:
RSLTS
QRY_ID | RES_ID | SCORE
-----------------------------
A | 1 | 15
A | 2 | 32
A | 3 | 29
C | 7 | 61
C | 9 | 30
KONTAKTE
C_ID | QRY_ID | RES_ID
----------------------------
1 | A | 2
2 | A | 1
3 | C | 9
Ich versuche, einen Bericht zu erstellen, der für jeden angezeigt wirdKONTAKT Aufzeichnung (C_ID
), dasRANK()
vonRES_ID
(durchSCORE
) in demRSLTS Tabelle innerhalb seiner Gruppe (QRY_ID
). Unter Verwendung der obigen Daten würde dies so aussehen:
C_ID | QRY_ID | RES_ID | SCORE | Rank
-----------------------------------------------
1 | A | 2 | 32 | 1
2 | A | 1 | 15 | 3
3 | C | 9 | 30 | 2
Bisher habe ich es versucht, aber es gibt Rank = 1 für die letzte Zeile zurück (und Rank = 2 für die zweite, was auch falsch ist)
SELECT
C.*
,R.SCORE
,RANK() OVER (PARTITION BY R.QRY_ID ORDER BY R.SCORE DESC)
FROM CONTACTS C LEFT JOIN RSLTS R
ON C.RES_ID = R.RES_ID
AND C.QRY_ID = R.QRY_ID
AKTUALISIEREN:SQLFiddle