Запрос, чтобы вытащить второй наименьший идентификатор

57
4

CUSTOMER(ID,CASE_ID,NAME,STATE)

1,100,Alex,NY
2,100,Alex,VA
3,100,Alex,CT
4,100,Tom,PA
5,102,Peter,MO
6,103,Dave,TN
.
.
.

Как написать запрос, чтобы вытащить 2-й наименьший (минимальный) id (если имеется) для каждой группы case_id

спросил(а) 2014-07-15T08:14:00+04:00 6 лет, 3 месяца назад
1
Решение
83

Пожалуйста попробуйте:

SELECT
ID,
CASE_ID
FROM
(
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY CASE_ID ORDER BY ID) Rn
FROM CUSTOMER
)x
WHERE Rn=2

ответил(а) 2014-07-15T08:18:00+04:00 6 лет, 3 месяца назад
57

Вы можете использовать функцию окна:

with cte as (
select ID, CASE_ID, ROW_NUMBER() over (partition by CASE_ID order by ID) rn
from CUSTOMER
)
select ID, CASE_ID
from cte
where rn = 2

Или вы можете использовать предложение exists для удаления первой строки (т.е. Получить минимальное значение, где есть строка с более низким значением):

select MIN(ID) ID, CASE_ID
from CUSTOMER c
where exists (select 1 from CUSTOMER c2 where c2.ID < c.ID and c2.CASE_ID = c.CASE_ID)
group by CASE_ID

Или, написано иначе:

select MIN(ID) ID, CASE_ID
from CUSTOMER c
where c.ID > (select MIN(ID) from CUSTOMER c2 where c2.CASE_ID = c.CASE_ID)
group by CASE_ID

ответил(а) 2014-07-15T08:19:00+04:00 6 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема