sql-запрос - разница между строками #447769


#0 by ДенисЧ
Хочется получить нечто вроде ((1, 0), (2, 2), (3, -4)...) То есть во второй колонке значение [N] - [N-1],  где N - номер строки. То есть от текущего значения отнять предыдущее. Что-то не соображу, как написать?
#1 by МихаилМ
select i as i1 , val, (select   val from mabl where i = (select max i where i < i1 )  ) as predZnach from mabl
#2 by ДенисЧ
Да, вроде похоже. Спасибо
#3 by ДенисЧ
Продолжим разговор. есть запрос. select Un_id_scan, date_scan, (  select un_id_scan  from test_scaner  t1    where t2.un_id_scan < t0.un_id_scan /*    and t2.un_id_raz not in (    )  ) as sel_un_id_raz from test_scaner  t0 where date_scan > to_date('01.12.2009', 'dd.mm.yyyy') and not exists (select un_id_raz from log_hand_wrt lhw where lhw.un_id_raz = t0.un_id_raz) order by un_id_scan desc Без закоментированной части - работает прекрасно. Но это блок нужен, а с ним отрабатывает эээ... Неспешно. За 5 минут я результата не дождался. Индексы по полям есть. Сервер - oracle 10g. Что можно поправить?
#4 by Sadovnikov
Все верно. Очччень тормозной запрос. Как показал опыт - курсор плюс временная таблица в данном случае существенно быстрее отрабатывают.
#5 by ДенисЧ
Что-то я с утра торможу... Пример не подкинешь? Простенький...
#6 by los_hooliganos
а подзапрос из селекта никак не вынести?
#7 by ДенисЧ
Куда?
#8 by Sadovnikov
Такие запросы, как в - жутчайшее зло... А поищи веточку, где поддипазоны искали. Месяца полтора назад была.
#9 by los_hooliganos
в секцию фром
#10 by ДенисЧ
Не прокатит, результат неправильный...
#11 by los_hooliganos
или как вариант олега  - курсор + временная таблица
#12 by ДенисЧ
Наверное, так и придётся... Но неаккуратненько как-то Кстати, пробовал создать materilized view на таблицу... Тот же мтс...
#13 by Sadovnikov
"Но неаккуратненько как-то" - почему? Я понимаю, что курсоры - зло. Но мы же без фанатиза их юзать будем, верно? :)
#14 by ДенисЧ
Некрасиво получается :-( Хотел сделать нечто такое, что и работает, и красиво...
#15 by Sadovnikov
Тебе шашечки или ехать? :) А ты курсор гламурненько назови и временную табличку с завитушками сделай, чтобы красиво было :)
#16 by los_hooliganos
вот тоже непонятно:    where t2.un_id_scan < t0.un_id_scan /*    and t2.un_id_raz not in (    ) почему сразу не писать:    select max(un_id_scan )    from test_scaner t2    where t2.un_id_scan < t0.un_id_scan /*    and t2.un_id_raz not in (
#17 by los_hooliganos
и джоин с таким запросом нормальный сделать можно
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С