powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Хитрый запрос
3 сообщений из 3, страница 1 из 1
Хитрый запрос
    #40053550
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите есть таблица:
Код: plsql
1.
2.
3.
4.
create table t (id integer, cat_id integer, val integer);
insert into t (id, cat_id, val) values (101, 1, 100);
insert into t (id, cat_id, val) values (102, 1, 200);
insert into t (id, cat_id, val) values (103, 2, 20);



Надо получить запросом t.id, t.cat_id, который имеет максимальный t.val если t.cat_id = 1.
и получить t.id, t.cat_id у которых t.cat_id = 2.

То есть для таблицы должно быть:
Код: plsql
1.
2.
3.
id cat_id
102 1
103 2



Сделал подзапросом с использованием union, может как то легче можно?
...
Рейтинг: 0 / 0
Хитрый запрос
    #40053553
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да по всякому можно.
Самое очевидное:
Код: plsql
1.
2.
3.
4.
5.
select id, cat_id
  from ( select t.*
              , case cat_id when 1 then lag(null,1,1) over(partition by cat_id order by val desc) else '1' end f 
         from t)
 where f='1';
...
Рейтинг: 0 / 0
Хитрый запрос
    #40053554
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

при таких данных подойдет max(id)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Хитрый запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]