|
|
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток. Столкнулся вот с такой задачей: Среднемесячные остатки по балансовому счету. Входные данные: маска счета, дата с, дата по. Выходные данные: номер счета, код валюты, среднемесячный остаток. Сортировка: среднемесячный остаток по убыванию. Примечание: сначала получение остатков лицевым счетам за каждый календарный день периода (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%' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 11:19 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
Решил перенести подзапрос в селект, в итоге выводит большие минусовые значение остатка. 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%' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 11:32 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
В качестве проверки просто посчитал суммы по дебету и кредиту, они одинаковые по данным счетам, т.е сальдо должно быть 0 (рисунок2). В приведенном выше запросе сальдо получается -118330105739,22 и оно одинаковое для двух счетов. Понятно, что там ошибка в логике, но пробую все варианты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 11:48 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
Cursor777... но пробую все варианты. Попробуйте сначала включить мозг подзапросы (которые не нужны) не имеют привязки к счетам, которые Вы хотите посчитать, и выводят суммы по всем данным таблицы ACCTURN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 11:55 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, добавил в подзапросы привязку в виде ACCT.ACCOUNT_ID = ACC.ID , Вы это имели в виду? Считает все равно не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 12:31 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
Сделал без подзапроса, вроде бы считает правильно (проверял дебет/кредит и считал вручную). В чем подвох? 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 12:53 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
Cursor777 В чем подвох? Такой же как и в прошлой теме - если по счету еще не было ни одного оборота, то он исчезнет из выборки. PS среднемесячный - это не то, что вы считаете: сначала получение остатков лицевым счетам за каждый календарный день периода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 13:21 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
j2k, можно у Вас узнать, как это написать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:10 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
Cursor777, Заходи в 408 кабинет, расскажем и подскажем. Чо ты так сразу?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:28 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
ramzestein, думал на форуме на мысль натолкнут, чтобы никого не отвлекать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:34 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2018, 08:56 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
Stax, 1. Тут бы начать вообще с получения остатка, так как DEBET и KREDIT это обороты которые к остатку имеют отношение но не более. 2. Для получение среднемесечного остатка, не имея поля с остатком на конец/начало дня, не самая оптимальная идея его вычеслять для каждого дня, а потом делить на кол-во дней. Есть другие алгоритмы - более быстрые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2018, 13:18 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
MaximaXXLStax, 1. Тут бы начать вообще с получения остатка, так как DEBET и KREDIT это обороты которые к остатку имеют отношение но не более. 2. Для получение среднемесечного остатка, не имея поля с остатком на конец/начало дня, не самая оптимальная идея его вычеслять для каждого дня, а потом делить на кол-во дней. Есть другие алгоритмы - более быстрые. имхо 1) считаю что DEBET и KREDIT есто остаток на счете дебетовый/кредитовый, я провтыкал что ето оборот но даже если оборот, то надо сначала посчитать остатки за период ACC.DATE_TURN <= '01/01/2010' потом уже считать среднее 2) конечно считать мона по разному и ето зависит от модели хранения (получения) остатка если период маленький (напр не больше месяца) в днях и счетов не млн то можно и на каждый день подгенерить .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2018, 13:34 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
Stax, Вряд ли там миллионы записей, уж очень похоже на учебную задачу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2018, 15:07 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
j2k, не знаю, наверное лаба ACCOUNT - судя по названию ето счета, а надо остатки ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2018, 15:23 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
j2kсначала получение остатков лицевым счетам за каждый календарный день периода Ну можно же, наверное, и просто взвесить остатки интервалом, зачем записи пусту плодить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2018, 19:12 |
|
||
|
Среднемесячные остатки по балансовому счету Oracle
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousНу можно же, наверное, и просто взвесить остатки интервалом, зачем записи пусту плодить...Сферического коня можно взвешивать и так, и этак. Кубическая масса всё равно не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2018, 21:23 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39641413&tid=1884017]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
216ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 495ms |

| 0 / 0 |
