powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Обнуленные финансовые транзакции
6 сообщений из 6, страница 1 из 1
Обнуленные финансовые транзакции
    #37696755
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASE 15.03

Решаю задачку. Я знаю как сделать ее через курсор, но на нынешнем размере таблицы это уж очень долгая работа.

Итак, имеется таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table #t(
   id           int,
   seq          int,
   amount       money,
   primary key (id, seq)
)

insert into #t values(1, 1, 10)
insert into #t values(1, 2, -10)
insert into #t values(1, 3, 20)
insert into #t values(1, 4, -10)
insert into #t values(2, 1, 10)
insert into #t values(2, 2, -10)
insert into #t values(2, 3, 10)



Спрашивается, как убить из таблицы все обнуленные транзакции? Надо в итоге получить результат:
id seq amount13 2014-1023-10

Через курсор я ее сделал, но работает оно тааак доооолго... Может кого-то озарит как это сделать быстрее чем последовательным перебором?
...
Рейтинг: 0 / 0
Обнуленные финансовые транзакции
    #37696841
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
alter table #t add balance money null

update #t set balance = (select sum(amount) from #t t2 where #t.id=t2.id and #t.seq>=t2.seq)

delete from #t where exists (select 1 from #t t2 where #t.id=t2.id and #t.seq<t2.seq and balance=0)

delete from #t where balance=0



Все равно долго, но хоть читать это проще чем курсорный цикл.
...
Рейтинг: 0 / 0
Обнуленные финансовые транзакции
    #37697062
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быстрее курсора, только оконные функции. В АЗЕшке их кажется нет, значит остается курсор.
А так задача чисто для курсора.
И что значит долго?
...
Рейтинг: 0 / 0
Обнуленные финансовые транзакции
    #37697283
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_oldБыстрее курсора, только оконные функции. В АЗЕшке их кажется нет, значит остается курсор.
А так задача чисто для курсора.
И что значит долго?Да, оконные функции тут наверное бы пригодились. Но в ASE их действительно пока нету.
"Долго" это когда мне надоедает ждать :)
...
Рейтинг: 0 / 0
Обнуленные финансовые транзакции
    #37697311
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так может помочь поотимизить скрипт курсора? Или после вас там уже ловить нечего? ;)
...
Рейтинг: 0 / 0
Обнуленные финансовые транзакции
    #37697530
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оптимизировать всегда есть чего. Но дальше уже только на реальных данных пожалуй.
В общем, я пока остановился на том коде, который я уже во втором сообщении показал. Еще добавил к нему индекс на #t (id,sec) и это примерно на порядок подняло скорость. На обработку 2М начальных записей в #t тратится около восьми минут.
Пока жить можно.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Обнуленные финансовые транзакции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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