Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Получить строку таблицы где 1 значение максимально  [new]
Aybo
Member

Откуда:
Сообщений: 11
Приветствую
Надо в 11й версии вставить в копию таблицы всю строку где в одном из столбцов значение максимально.
Аналогичная - скопировать только последние строки исходников, например уже есть таблица:

create table s_copy as select * from all_source where 0=1


Насколько я знаю более менее быстро работает такой запрос

insert into s_copy
select * from
(select a.*, row_number() over(partition by a.owner, a.name order by a.line desc) rn from all_source a)
where rn = 1


но инсерт ругается что лишний столбец rn

Поэтому вопрос нельзя ли избежать явного перечисления многочисленных столбцов или более долгого запроса?

Или insert * в любом случае быдлокод)
17 ноя 20, 17:49    [22234021]     Ответить | Цитировать Сообщить модератору
 Re: Получить строку таблицы где 1 значение максимально  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
Aybo
insert * в любом случае быдлокод
17 ноя 20, 17:58    [22234031]     Ответить | Цитировать Сообщить модератору
 Re: Получить строку таблицы где 1 значение максимально  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Aybo,

если очень хочется,

select * from all_source a
order by max(id) over(partition by a.owner, a.name) -a.id

в первых

(select count(*) from all_source a group by a.owner, a.name)

строчках будет содержать нужные строчки.
17 ноя 20, 18:43    [22234072]     Ответить | Цитировать Сообщить модератору
 Re: Получить строку таблицы где 1 значение максимально  [new]
Aybo
Member

Откуда:
Сообщений: 11
НеофитSQL,

Это как-то сложно.

Значит и еще проще задача - запихать через select into одну такую максимальную строку по конкретному name в переменную all_source%rowtype нельзя?
Только pl/sql цикл с сортировкой и exit?
18 ноя 20, 12:50    [22234518]     Ответить | Цитировать Сообщить модератору
 Re: Получить строку таблицы где 1 значение максимально  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
Aybo
Приветствую
Надо в 11й версии вставить в копию таблицы всю строку где в одном из столбцов значение максимально.


insert into s_copy
select * from (select * from t by col desc) where rownum<2

автор
Аналогичная - скопировать только последние строки исходников, например уже есть таблица:

  1  insert into emp3 select * from emp
  2*   where rowid in (select max(rowid) KEEP (DENSE_RANK first ORDER BY sal DESC) from emp e2 group by deptno)
SQL> /

3 rows created.

SQL> select * from emp3;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
      7698 BLAKE      MANAGER         7839 01.05.1981       2850                    30
      7839 KING       PRESIDENT            17.11.1981       5000                    10
      7902 FORD       ANALYST         7566 03.12.1981       3000                    20

SQL>


.....
stax

Сообщение было отредактировано: 18 ноя 20, 17:03
18 ноя 20, 16:59    [22234769]     Ответить | Цитировать Сообщить модератору
 Re: Получить строку таблицы где 1 значение максимально  [new]
Aybo
Member

Откуда:
Сообщений: 11
Ага работает, спс
18 ноя 20, 17:44    [22234799]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить