SQL Находит значение в таблице с максимальным значением (результат должен быть доступен для редактирования)

#sql #sql-server #max

#sql #sql-сервер #макс

Вопрос:

итак, я застрял на этой, кажется, простой проблеме.

У меня есть таблица с некоторой информацией

ID Другой идентификатор
1 100
2 214
1 1156
3 1252
4
1 240

Теперь мне нужны только строки с наибольшим значением в редактируемом запросе, например:

 | ID       | Other ID           |
| -------- | -------------- |
| 2        | 214    |
| 1        | 1156            |
| 3        | 1252            |
| 4        |           |
 

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

Я попытался создать запрос, в котором указаны все Max (дата), ID и объединить их с помощью JOIN. Но это делает запрос недоступным для редактирования

Надеюсь, я описал свою проблему достаточно хорошо, чтобы понять… Спасибо: D

Ответ №1:

Самый простой метод — использовать row_number() :

 select t.*
from (select t.*,
             row_number() over (partition by id
                                order by otherid desc
                               ) as seqnum
      from t
     ) t
where seqnum = 1;
 

К счастью, SQL обрабатывает NULL значения как меньшие, чем любое другое значение для целей сортировки, поэтому по убыванию order by они помещаются последними.

Ответ №2:

 ID  OTHER ID
1   100
2   214
1   1156
3   1252
4   
1   240


create table find_max(id number(2),other_id number(10));

insert into find_max values(1,100);
insert into find_max values(2,214);
insert into find_max values(1,1156);
insert into find_max values(3,1252);
insert into find_max values(4,null);
insert into find_max values(1,240);
commit;

with d as(
select * from find_max),
 d2 as(select d.*,dense_rank() over(partition by id order by other_id desc nulls last) r from d
where id =1)
select * from d2
where r=:r;