SQL RANK () sobre PARTITION nas tabelas associadas
Eu tenho duas tabelas RSLTS e CONTACTS:
RSLTS
QRY_ID | RES_ID | SCORE
-----------------------------
A | 1 | 15
A | 2 | 32
A | 3 | 29
C | 7 | 61
C | 9 | 30
CONTATOS
C_ID | QRY_ID | RES_ID
----------------------------
1 | A | 2
2 | A | 1
3 | C | 9
Estou tentando criar um relatório que mostre, para cadaCONTATO registro (C_ID
), aRANK()
doRES_ID
(porSCORE
) noRSLTS tabela dentro do seu grupo (QRY_ID
). Usando os dados acima, ficaria assim:
C_ID | QRY_ID | RES_ID | SCORE | Rank
-----------------------------------------------
1 | A | 2 | 32 | 1
2 | A | 1 | 15 | 3
3 | C | 9 | 30 | 2
Até agora, eu tentei isso, mas ele retorna Rank = 1 para a última linha (e rank = 2 para o segundo, que também está errado)
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
ATUALIZAR:SQLFiddle