RSLTS と CONTACTS の 2 つのテーブルがあります。
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
) について、そのグループ ( ) 内のRSLTSRANK()
テーブルのRES_ID
( by SCORE
)を表示するレポートを作成しようとしています。上記のデータを使用すると、次のようになります。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
これまでのところ、私はこれを試しましたが、最後の行でランク = 1 を返します (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