Вернуть только строки с максимальным ключом - PullRequest
0 голосов
/ 10 сентября 2018

В моей таблице два столбца:

- RECE_KEY
- INVE_KEY

Я хочу вернуть только строки для INVE_KEY, где RECE_KEY - максимум.

Пример:

INVE_KEY = 1 включено в RECE_KEY = 1,2,3. Максимальное значение RECE_KEY в этом примере равно 3, поэтому правильный результат будет:

+----------+----------+
| RECE_KEY | INVE_KEY |
+----------+----------+
|        3 |        1 |
|        3 |        1 |
|        3 |        1 |
|        3 |        1 |
+----------+----------+

Для всей таблицы ожидаемый результат будет:

+----------+----------+
| RECE_KEY | INVE_KEY |
+----------+----------+
|        3 |        1 |
|        3 |        1 |
|        3 |        1 |
|        3 |        1 |
|        3 |        4 |
|        5 |        5 |
|        5 |        5 |
|        5 |        5 |
+----------+----------+

Я пытался решить эту группу и где условия, но безуспешно. Думаю, я что-то упустил?

Пример таблицы ниже:

DECLARE @JEREIN TABLE
(
RECE_KEY INT,
INVE_KEY INT
)

INSERT INTO @JEREIN 
VALUES(1,1),(1,1),(1,1),(2,1),(2,1),(3,1),(3,1),(3,1),(3,1),(2,4),(2,4),(3,4),(3,5),(3,5),(5,5),(5,5),(5,5)

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Первым выбором будет ranking функция, но вы также можете использовать исправленный suqbuery:

select t.*
from @JEREIN t
where RECE_KEY = (select max(t1.RECE_KEY) from @JEREIN t1 where t1.INVE_KEY = t.INVE_KEY);

Однако вы также можете использовать dense_rank с галстуками предложение:

select top (1) with ties t.*
from @JEREIN t
order by dense_rank() over (partition by INVE_KEY order by RECE_KEY desc);
0 голосов
/ 10 сентября 2018

Вы можете использовать оконную функцию rank, чтобы найти верхнюю строку для inve_key:

SELECT rece_key, inve_key
FROM   (SELECT rece_key, inve_key, RANK() OVER (PARTITION BY inve_key ORDER BY rece_key DESC) AS rk
        FROM   @JEREIN) t
WHERE  rk = 1
...