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

Откуда: Химки МО
Сообщений: 1248
Товарищи - что то я никак не осилю как лучше написать чтобы быстро работало...
Есть таблица примерно такого содержания:

Table1:
PK Number Number, Char
serno, group, count, status

нужно написать примерно следующее:
select *
from table1 t
inner join table1 tt on t.group = tt.group
??? having max(tt.serno) < t.serno

Т.е. к каждой строке из таблицы нужна предидущая (по полю serno) строка по группе (поле group) :-)
Индекс есть по serno. По group индекс составной еще из нескольких полей которые совсем не вяжутся с данным условием.

Как то надо прикрутить partitioned by?
Помогите :-)
9 июн 11, 14:23    [10789802]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос - таблица сама на себя  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Петров Андрей,

см. lag/lead
9 июн 11, 14:25    [10789823]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос - таблица сама на себя  [new]
Петров Андрей
Member

Откуда: Химки МО
Сообщений: 1248
Так?
LEAD(t.serno, 1) OVER (Partition By t.group Order By serno Desc)
9 июн 11, 14:30    [10789855]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос - таблица сама на себя  [new]
Anton_Demin
Member

Откуда: Ставрополь
Сообщений: 294
Петров Андрей,

with t as (select 1 serno, 'gr1' xgroup, 10 xcount,'A' status from dual
     union select 2 serno, 'gr1' xgroup, 20 xcount,'A' status from dual
     union select 3 serno, 'gr1' xgroup, 30 xcount,'A' status from dual
     union select 4 serno, 'gr1' xgroup, 40 xcount,'A' status from dual
     union select 5 serno, 'gr2' xgroup, 50 xcount,'A' status from dual
     union select 6 serno, 'gr2' xgroup, 60 xcount,'A' status from dual
     union select 7 serno, 'gr2' xgroup, 70 xcount,'A' status from dual
     union select 8 serno, 'gr3' xgroup, 80 xcount,'A' status from dual
     union select 9 serno, 'gr4' xgroup, 90 xcount,'A' status from dual)
select serno
       ,lag(serno) over (partition by xgroup order by serno) last_serno
       ,xgroup
       ,xcount
       ,status
from t 
9 июн 11, 14:38    [10789921]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить