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

Откуда:
Сообщений: 4
Есть база данных о состоянии счетов. Oracle SQL Такого вида, но гораздо больше. Таблица balans_a

Картинка с другого сайта.

Account_id - номер счета
Datebal – дата изменения баланса
Столбцы debet_e , kredit_e отражает состояние счета по дебету, кредиту соответственно на дату (datebal) баланса.
Вторая таблица, accstatus_a связанная с первой по номеру счета (balans_a.account_id=accstatus.id) содержит информацию о коде валюты.

Картинка с другого сайта.


Нужно написать запрос для определения остатков по всем счетам на ЗАДАННУЮ дату.
Сгруппировать и просуммировать остатки по БАЛАНСОВОМУ СЧЕТУ.
Вывести столбцы номер_счета, код_валюты, остаток_на_дату.
то есть в данном случае остатки это сумма по счетам debet_e – kredit_e.

Так как база очень большая нужно найти какой-то оптимальный вариант, чтобы запрос побыстрее выполнялся.
16 сен 11, 11:33    [11286055]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос.  [new]
torturer
Member

Откуда:
Сообщений: 4
Чего-то накосячил с картинками.
Вот первая таблица
http://imageshack.us/photo/my-images/846/111lm.jpg/

вот вторая

http://imageshack.us/photo/my-images/684/222cit.jpg/
16 сен 11, 11:40    [11286113]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос.  [new]
Злой ветеринар
Guest
torturer,

1) Некоторые остатки у вас получатся отрицательными, так как вы не учитываете статус балансового счета (актив/пасив).
2) Кто у вас уникальный ключ в таблице с остатками? Какие индексы там есть.
16 сен 11, 14:51    [11288323]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос.  [new]
stax..
Guest
Злой ветеринар
torturer,

1) Некоторые остатки у вас получатся отрицательными, так как вы не учитываете статус балансового счета (актив/пасив).
2) Кто у вас уникальный ключ в таблице с остатками? Какие индексы там есть.

на 1) Столбцы debet_e , kredit_e скорее всего оборот (движение) по счету

2 torturer "на ЗАДАННУЮ дату" записи в табличке balans_a существуют?

......
stax
16 сен 11, 16:00    [11289129]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос.  [new]
Злой ветеринар
Guest
stax..,

Судя по "...Datebal – дата изменения баланса" - там не за каждый день, только по факту изменения
16 сен 11, 16:38    [11289457]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос.  [new]
stax..
Guest
Злой ветеринар
stax..,

Судя по "...Datebal – дата изменения баланса" - там не за каждый день, только по факту изменения

да фиг его знает, напр в банке баланс подводят каждый рабочий день

.....
stax
16 сен 11, 17:30    [11289983]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос.  [new]
torturer
Member

Откуда:
Сообщений: 4
Злой ветеринар,
Это да, но вроде как так и нужно.
Остатки - это и должна быть таблица, возвращаемая запросом. А эти две таблица связаны только через balans_a.Account_id=accstatus_a.id
Нет, записи ведутся каждый рабочий день. Вносится состояние на каждый раб. день. Если ничего не изменилось, переносится с прошлого рабочего дня.
19 сен 11, 10:38    [11296492]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос.  [new]
Злой ветеринар
Guest
torturer,

Вот именно: "...записи ведутся каждый РАБОЧИЙ день"
но при этом надо "...написать запрос для определения остатков по всем счетам на ЗАДАННУЮ дату".

При положении, что правильно угадал вашу структуру (ибо информацию об индексах и PK вы постеснялись раскрыть) то в первом приближении:

select
t1.account_id,
t2.currency_id,
sum(t1.debet_e – t.kredit_e) as rest
from
balans_a t1,
accstatus t2
where
t1.account_id=t2.id
and
t1.datebal=(select max(M.datebal) from  balans_a M where M.account_id=t1.account_id and M.datebal<=:p_my_date)
group by 
t1.account_id,
t2.currency_id
19 сен 11, 15:37    [11299320]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос.  [new]
torturer
Member

Откуда:
Сообщений: 4
Злой ветеринар,
Спасибо большое, вроде как работает.
21 сен 11, 10:24    [11309835]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить