![]() |
![]() |
![]() |
|
sql-запрос - разница между строками | ☑ | ||
---|---|---|---|---|
0
ДенисЧ
03.12.09
✎
13:09
|
Есть таблица
i, val например, ((1, 10), (2,12), (3, 8)...) Хочется получить нечто вроде ((1, 0), (2, 2), (3, -4)...) То есть во второй колонке значение [N] - [N-1], где N - номер строки. То есть от текущего значения отнять предыдущее. Что-то не соображу, как написать? |
|||
1
МихаилМ
03.12.09
✎
13:17
|
select
i as i1 , val, (select val from mabl where i = (select max i where i < i1 ) ) as predZnach from mabl |
|||
2
ДенисЧ
03.12.09
✎
13:22
|
Да, вроде похоже. Спасибо
|
|||
3
ДенисЧ
04.12.09
✎
08:49
|
Продолжим разговор.
есть запрос. select Un_id_scan, date_scan, ( select un_id_scan from test_scaner t1 where un_id_scan = ( 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 ( select un_id_raz from log_hand_wrt )*/ ) ) 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
Sadovnikov
04.12.09
✎
08:51
|
(3) Все верно. Очччень тормозной запрос. Как показал опыт - курсор плюс временная таблица в данном случае существенно быстрее отрабатывают.
|
|||
5
ДенисЧ
04.12.09
✎
08:52
|
(4) Что-то я с утра торможу... Пример не подкинешь? Простенький...
|
|||
6
los_hooliganos
04.12.09
✎
08:57
|
(5) а подзапрос из селекта никак не вынести?
|
|||
7
ДенисЧ
04.12.09
✎
08:58
|
(6) Куда?
|
|||
8
Sadovnikov
04.12.09
✎
09:01
|
Такие запросы, как в (1) - жутчайшее зло...
(5) А поищи веточку, где поддипазоны искали. Месяца полтора назад была. |
|||
9
los_hooliganos
04.12.09
✎
09:10
|
(7) в секцию фром
|
|||
10
ДенисЧ
04.12.09
✎
09:11
|
(9) Не прокатит, результат неправильный...
|
|||
11
los_hooliganos
04.12.09
✎
09:12
|
или как вариант олега - курсор + временная таблица
|
|||
12
ДенисЧ
04.12.09
✎
09:13
|
Наверное, так и придётся... Но неаккуратненько как-то
Кстати, пробовал создать materilized view на таблицу... Тот же мтс... |
|||
13
Sadovnikov
04.12.09
✎
09:14
|
(12) "Но неаккуратненько как-то" - почему? Я понимаю, что курсоры - зло. Но мы же без фанатиза их юзать будем, верно? :)
|
|||
14
ДенисЧ
04.12.09
✎
09:15
|
(13) Некрасиво получается :-(
Хотел сделать нечто такое, что и работает, и красиво... |
|||
15
Sadovnikov
04.12.09
✎
09:17
|
(14) Тебе шашечки или ехать? :)
А ты курсор гламурненько назови и временную табличку с завитушками сделай, чтобы красиво было :) |
|||
16
los_hooliganos
04.12.09
✎
09:17
|
вот тоже непонятно:
select un_id_scan from test_scaner t1 where un_id_scan = ( 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 ( select un_id_raz from log_hand_wrt )*/ ) почему сразу не писать: 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 ( select un_id_raz from log_hand_wrt )*/ |
|||
17
los_hooliganos
04.12.09
✎
09:18
|
и джоин с таким запросом нормальный сделать можно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |