SQL RANK () nad PARTITION na połączonych tabelach
Mam dwie tabele RSLTS i CONTACTS:
RSLTS
QRY_ID | RES_ID | SCORE
-----------------------------
A | 1 | 15
A | 2 | 32
A | 3 | 29
C | 7 | 61
C | 9 | 30
ŁĄCZNOŚĆ
C_ID | QRY_ID | RES_ID
----------------------------
1 | A | 2
2 | A | 1
3 | C | 9
Próbuję stworzyć raport, który będzie pokazywał dla każdegoKONTAKT rekord (C_ID
)RANK()
zRES_ID
(przezSCORE
) wRSLTS stół w swojej grupie (QRY_ID
). Używając powyższych danych, wyglądałoby to tak:
C_ID | QRY_ID | RES_ID | SCORE | Rank
-----------------------------------------------
1 | A | 2 | 32 | 1
2 | A | 1 | 15 | 3
3 | C | 9 | 30 | 2
Do tej pory próbowałem tego, ale zwraca on Rank = 1 dla ostatniego wiersza (i rangę = 2 dla drugiego, który również jest błędny)
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
AKTUALIZACJA:SQLFiddle