SQL RANK () над PARTITION для объединенных таблиц
У меня есть две таблицы RSLTS и КОНТАКТЫ:
RSLTS
QRY_ID | RES_ID | SCORE
-----------------------------
A | 1 | 15
A | 2 | 32
A | 3 | 29
C | 7 | 61
C | 9 | 30
CONTACTSI»
C_ID | QRY_ID | RES_ID
----------------------------
1 | A | 2
2 | A | 1
3 | C | 9
Я пытаюсь создать отчет, который будет показывать, для каждогоCONTACT запись (C_ID
), тоRANK()
изRES_ID
(отSCORE
) вRSLTS таблица в своей группе (QRY_ID
). Используя данные выше, это будет выглядеть так:
C_ID | QRY_ID | RES_ID | SCORE | Rank
-----------------------------------------------
1 | A | 2 | 32 | 1
2 | A | 1 | 15 | 3
3 | C | 9 | 30 | 2
До сих пор я пробовал это, но он возвращает Rank = 1 для последней строки (и rank = 2 для второй, что также неверно)
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
ОБНОВИТЬ:SQLFiddle