У меня есть две таблицы RSLTS и CONTACTS:
RSLTS
QRY_ID | RES_ID | SCORE
-----------------------------
A | 1 | 15
A | 2 | 32
A | 3 | 29
C | 7 | 61
C | 9 | 30
КОНТАКТЫ
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
DENSE_RANK()
(который закроет «пробелы» между рейтингами)? - person Clockwork-Muse   schedule 20.12.2012