2016-08-24 1 views
-1

я следующую таблицуSQL: Получить значение столбца, соответствующий максимальному значению столбца

MyTable

Id | S_Id | T_Id | 
1 | 1 | abc | 
2 | 2 | abc | 
3 | 3 | abc | 
4 | 4 | abc | 
5 | 1 | xyz | 
6 | 2 | xyz | 
7 | 3 | xyz | 

У меня есть еще один стол AnotherTable

P_Id | Name | Id | 
    1 | pqr | 4 | 
    2 | stu | 4 | 
    3 | mvc | 4 | 
    4 | yxf | 3 | 

у меня будет T_Id в качестве входного, например, : abc. Я хочу, чтобы запрос, чтобы выбрать идентификатор строки с максимальной s_id т.е. 4 и присоединиться к AnotherTable и результат:

Id | S_Id | T_Id | P_Id | Name | 
4 | 4 | abc | 1 | pqr | 
4 | 4 | abc | 2 | stu | 
4 | 4 | abc | 3 | mvc | 

Любая помощь приветствуется.

ответ

1

Использование rank() функция окна, если вы на 11g или до

select id 
    from (
    select id, rank() over (partition by T_Id order by S_Id desc) as rn 
    from myTable 
    where T_Id = 'abc') t 
where t.rn = 1; 

на 12с вы можете использовать fetch

select id 
    from myTable 
where T_Id = 'abc' 
order by S_Id desc 
fetch first 1 row; 

Используйте Регистрация на новом требовании

select t.Id, t.S_Id, t.T_Id, t1.P_Id, t1.Name 
    from (
    select id, S_id, t_id rank() over (partition by T_Id order by S_Id desc) as rn 
    from myTable 
    where T_Id = 'abc') t join AnotherTable t1 on t.id = t1.P_id 
where t.rn = 1; 
+0

Спасибо. Оно работает. Но есть ли другой вариант, кроме ранга. Поскольку я хочу, чтобы он запускался в каждой базе данных, когда это необходимо. –

+1

@SonamDaultani Каждая база данных Oracle? Я думаю, что Ранг() работает с 8i и далее – vercelli

+1

Да, я имел в виду все версии оракула. Я проверил его со всеми версиями выше 8i. Спасибо за предложение. –

 Смежные вопросы

  • Нет связанных вопросов^_^