Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Среднемесячные остатки по балансовому счету Oracle / 17 сообщений из 17, страница 1 из 1
07.05.2018, 11:19
    #39641280
Cursor777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
Всем доброго времени суток. Столкнулся вот с такой задачей:
Среднемесячные остатки по балансовому счету.
Входные данные: маска счета, дата с, дата по.
Выходные данные: номер счета, код валюты, среднемесячный остаток.
Сортировка: среднемесячный остаток по убыванию.
Примечание: сначала получение остатков лицевым счетам за каждый календарный день периода (13 цифр), затем получение среднего значения.


С подзапросами пока что напряжно, прошу помощи. Хотя бы на примере посмотреть как должны выглядеть селекты.
Вот то что сделал, но это в корне не так, как необходимо в условии.

SELECT
ACC.CODE "Номер счета", P_DIMENSION.GETDIMCODE(CURRENCY_ID) "Валюта"
FROM
ACCOUNT ACC,
(SELECT -SUM(DEBET) AS DEBET
FROM
ACCTURN ACC
WHERE
ACC.DATE_TURN BETWEEN '01/12/2009' AND '01/01/2010'
UNION
SELECT SUM(KREDIT) AS KREDIT
FROM
ACCTURN ACC
WHERE
ACC.DATE_TURN BETWEEN '01/12/2009' AND '01/01/2010')
WHERE
ACC.CODE LIKE '3012200599%'
...
Рейтинг: 0 / 0
07.05.2018, 11:32
    #39641291
Cursor777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
Решил перенести подзапрос в селект, в итоге выводит большие минусовые значение остатка.
SELECT
ACC.CODE "Номер счета", P_DIMENSION.GETDIMCODE(CURRENCY_ID) "Валюта",
((SELECT -SUM(DEBET) AS DEBET
FROM
ACCTURN ACC
WHERE
ACC.DATE_TURN BETWEEN '01/12/2009' AND '01/01/2010') +
(SELECT SUM(KREDIT) AS KREDIT
FROM
ACCTURN ACC
WHERE
ACC.DATE_TURN BETWEEN '01/12/2009' AND '01/01/2010')) AS SALDO
FROM
ACCOUNT ACC
WHERE
ACC_TYPE_ID = P_ACCT.GETIDBYNAME('Балансовый') AND
ACC.CODE LIKE '3012200599%'


select * from account where CODE LIKE '3012200599%'
...
Рейтинг: 0 / 0
07.05.2018, 11:48
    #39641307
Cursor777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
В качестве проверки просто посчитал суммы по дебету и кредиту, они одинаковые по данным счетам, т.е сальдо должно быть 0 (рисунок2).

В приведенном выше запросе сальдо получается -118330105739,22 и оно одинаковое для двух счетов.
Понятно, что там ошибка в логике, но пробую все варианты.
...
Рейтинг: 0 / 0
07.05.2018, 11:55
    #39641314
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
Cursor777... но пробую все варианты.

Попробуйте сначала включить мозг

подзапросы (которые не нужны) не имеют привязки к счетам, которые Вы хотите посчитать, и выводят суммы по всем данным таблицы ACCTURN.
...
Рейтинг: 0 / 0
07.05.2018, 12:31
    #39641347
Cursor777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
MaximaXXL, добавил в подзапросы привязку в виде ACCT.ACCOUNT_ID = ACC.ID , Вы это имели в виду? Считает все равно не так.
...
Рейтинг: 0 / 0
07.05.2018, 12:53
    #39641355
Cursor777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
Сделал без подзапроса, вроде бы считает правильно (проверял дебет/кредит и считал вручную). В чем подвох?
SELECT
ACC.CODE AS "Номер счета", ( SUM(ACCT.KREDIT) - SUM(ACCT.DEBET) ) AS "Среднемесячный остаток"
FROM
ACCOUNT ACC, ACCTURN ACCT
WHERE
ACC.ID = ACCT.ACCOUNT_ID AND
CODE LIKE '3012200%' AND
ACCT.DATE_TURN BETWEEN '31/01/2009' AND '31/01/2010'
GROUP BY ACC.CODE
ORDER BY 2 DESC;
...
Рейтинг: 0 / 0
07.05.2018, 13:21
    #39641373
j2k
j2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
Cursor777 В чем подвох?
Такой же как и в прошлой теме - если по счету еще не было ни одного оборота, то он исчезнет из выборки.
PS среднемесячный - это не то, что вы считаете:
сначала получение остатков лицевым счетам за каждый календарный день периода
...
Рейтинг: 0 / 0
07.05.2018, 14:10
    #39641413
Cursor777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
j2k, можно у Вас узнать, как это написать?
...
Рейтинг: 0 / 0
07.05.2018, 14:28
    #39641419
ramzestein
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
Cursor777,

Заходи в 408 кабинет, расскажем и подскажем. Чо ты так сразу?)
...
Рейтинг: 0 / 0
07.05.2018, 14:34
    #39641430
Cursor777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
ramzestein, думал на форуме на мысль натолкнут, чтобы никого не отвлекать :)
...
Рейтинг: 0 / 0
08.05.2018, 08:56
    #39641794
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
Cursor777Всем доброго времени суток. Столкнулся вот с такой задачей:
Среднемесячные остатки по балансовому счету.
Входные данные: маска счета, дата с, дата по.
Выходные данные: номер счета, код валюты, среднемесячный остаток.
Сортировка: среднемесячный остаток по убыванию.
Примечание: сначала получение остатков лицевым счетам за каждый календарный день периода (13 цифр), затем получение среднего значения.


С подзапросами пока что напряжно, прошу помощи. Хотя бы на примере посмотреть как должны выглядеть селекты.
Вот то что сделал, но это в корне не так, как необходимо в условии.

SELECT
ACC.CODE "Номер счета", P_DIMENSION.GETDIMCODE(CURRENCY_ID) "Валюта"
FROM
ACCOUNT ACC,
(SELECT -SUM(DEBET) AS DEBET
FROM
ACCTURN ACC
WHERE
ACC.DATE_TURN BETWEEN '01/12/2009' AND '01/01/2010'
UNION
SELECT SUM(KREDIT) AS KREDIT
FROM
ACCTURN ACC
WHERE
ACC.DATE_TURN BETWEEN '01/12/2009' AND '01/01/2010')
WHERE
ACC.CODE LIKE '3012200599%'

сначала Вам надо определится что хранится в ACCTURN
допустим
1) CODE -номер счета
2) DEBET -дебетовый остаток
3) KREDIT - кредитовый остаток
4) DATE_TURN - дата чего-то, чего?
-остаток на начало дня?
-остаток на конец дня?
-остаток на каждий день (в тч выходные), или когда был оборот?

после етого приступите к написанию селекта, за раз все не решайте, поступово
1) отберите нужные счета
2) получите остатки за период (за каждый календарный день периода (13 цифр))
4) решите что значит 13
5) посчитайте среднее
6) отсортируйте

гдето так

.....
stax
...
Рейтинг: 0 / 0
08.05.2018, 13:18
    #39641987
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
Stax,

1. Тут бы начать вообще с получения остатка, так как DEBET и KREDIT это обороты которые к остатку имеют отношение но не более.
2. Для получение среднемесечного остатка, не имея поля с остатком на конец/начало дня, не самая оптимальная идея его вычеслять для каждого дня, а потом делить на кол-во дней. Есть другие алгоритмы - более быстрые.
...
Рейтинг: 0 / 0
08.05.2018, 13:34
    #39641997
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
MaximaXXLStax,

1. Тут бы начать вообще с получения остатка, так как DEBET и KREDIT это обороты которые к остатку имеют отношение но не более.
2. Для получение среднемесечного остатка, не имея поля с остатком на конец/начало дня, не самая оптимальная идея его вычеслять для каждого дня, а потом делить на кол-во дней. Есть другие алгоритмы - более быстрые.

имхо
1) считаю что DEBET и KREDIT есто остаток на счете дебетовый/кредитовый, я провтыкал что ето оборот
но даже если оборот, то надо сначала посчитать остатки за период ACC.DATE_TURN <= '01/01/2010'
потом уже считать среднее

2) конечно считать мона по разному и ето зависит от модели хранения (получения) остатка
если период маленький (напр не больше месяца) в днях и счетов не млн то можно и на каждый день подгенерить

....
stax
...
Рейтинг: 0 / 0
08.05.2018, 15:07
    #39642054
j2k
j2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
Stax, Вряд ли там миллионы записей, уж очень похоже на учебную задачу :)
...
Рейтинг: 0 / 0
08.05.2018, 15:23
    #39642065
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
j2k,

не знаю, наверное лаба

ACCOUNT - судя по названию ето счета, а надо остатки

.....
stax
...
Рейтинг: 0 / 0
08.05.2018, 19:12
    #39642181
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
j2kсначала получение остатков лицевым счетам за каждый календарный день периода
Ну можно же, наверное, и просто взвесить остатки интервалом, зачем записи пусту плодить...
...
Рейтинг: 0 / 0
08.05.2018, 21:23
    #39642199
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднемесячные остатки по балансовому счету Oracle
andrey_anonymousНу можно же, наверное, и просто взвесить остатки интервалом, зачем записи пусту плодить...Сферического коня можно взвешивать и так, и этак. Кубическая масса всё равно не получится.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Среднемесячные остатки по балансовому счету Oracle / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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