Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 никпик  [new]
селект
Guest
В таблице поля поля a, b, c, d, где a, b, c поля типа number, d - дата. Необходимо получить в конечном наборе поле d и поле m, которое вычислялось бы по следующей формуле: вычисленное выражение из предыдущего поля (a + b -c) плюс b минус c.
Т.е.
m d
1) a+b-c 31.03.2007
2) 1) +b-c 30.03.2007
3) 2) +b-c 29.03.2007
Практический смысл: поле a - текущее состояние счета, поле b - обороты по дебету за дату, поле с - обороты по кредиту за дату. Нужно найти состояние счета(сумму на счете) на дату.
5 апр 07, 12:26    [3983827]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
никпик
Guest
перепутал тему и автора.
5 апр 07, 12:30    [3983868]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
jenyz
Member

Откуда:
Сообщений: 261
lag
5 апр 07, 12:34    [3983904]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
jenyz
lag
скорее автору не lag, а накопительная сумма нужна (sum(...) over(order by d)).
5 апр 07, 12:37    [3983922]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
fantozzi
Member [заблокирован]

Откуда: Москва
Сообщений: 172
anum NUMBER;
bnum NUMBER;
cnum NUMBER;
zzz NUMBER;
далее в цикле forall
select a into anum from TABLE_NAME where d=TO_DATE('31.03.2007', 'DD-MM-YYYY');
select b into bnum from TABLE_NAME where d=TO_DATE('31.03.2007', 'DD-MM-YYYY');
select c into cnum from TABLE_NAME where d=TO_DATE('31.03.2007', 'DD-MM-YYYY');
anum+bnum-cnum=zzz
zzz - куда надо выводишь
end forall
5 апр 07, 12:40    [3983944]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116100
Бабичев Сергей
jenyz
lag
скорее автору не lag, а накопительная сумма нужна (sum(...) over(order by d)).


Как бы автору не MODEL нужен был ...
5 апр 07, 12:40    [3983951]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
Elic
Member

Откуда:
Сообщений: 29977
sum(...) over (...)
селект
поле a - текущее состояние счета.
Разве это не есть ответ ?
5 апр 07, 12:41    [3983959]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
Goldminer
Member

Откуда:
Сообщений: 553
first_value(a) over(order by d) + sum(b - c) over(order by d)
5 апр 07, 12:43    [3983984]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18339
Goldminer
first_value(a) over(order by d) + sum(b - c) over(order by d)

Ага, только в обязательном порядке надо указать partition by.
5 апр 07, 13:17    [3984231]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
Goldminer
Member

Откуда:
Сообщений: 553
andrey_anonymous
Goldminer
first_value(a) over(order by d) + sum(b - c) over(order by d)

Ага, только в обязательном порядке надо указать partition by.

В условии ничего такого нет... Возможно, вполне достаточно WHERE. Но это уж пусть автор дорабатывает напильником :)
5 апр 07, 13:21    [3984267]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
никпик
Guest
jenyz сегодня, 12:34.
Непонятно, как в данном случае воспользоваться Lag.

1 строка: lag(a + b - c, 1, a + b - c) - правильно
2 строка: lag(результат из 1 строки) + b - с - как подставить результат из 1 строки?

fantozzi сегодня, 12:40
спасибо, но хотелось бы в селекте.

Elic сегодня, 12:41
a - текущее состоянием счета на максимальную дату. в данном исходящий остаток на 31.03.2007.
После операций:
1) a+b-c 31.03.2007 получим входящий остаток на 31,03,2007
2) 1) +b-c 30.03.2007 получим входящий остаток на 30,03,2007
3) 2) +b-c 29.03.2007 получим входящий остаток на 29,03,2007

Goldminer, andrey_anonymous - условие дополнил.
5 апр 07, 13:46    [3984492]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
никпик
Guest
т.е.
поле а во всех строках принимает одинаковое значение, равное исходящему остатку на максимальную дату
5 апр 07, 13:48    [3984519]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
Goldminer
Member

Откуда:
Сообщений: 553
Тогда
order by d desc
Суть то не меняется
5 апр 07, 13:54    [3984568]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
Goldminer
Member

Откуда:
Сообщений: 553
никпик
т.е.
поле а во всех строках принимает одинаковое значение, равное исходящему остатку на максимальную дату

Странное какое поле
5 апр 07, 13:55    [3984579]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
Elic
Member

Откуда:
Сообщений: 29977
никпик
поле а во всех строках принимает одинаковое значение, равное исходящему остатку на максимальную дату
Это какой же недоархитектор такое придумал?
a + sum(b - c) over (order by d desc) as m
5 апр 07, 13:57    [3984601]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
никпик
Guest
Goldminer
Тогда
order by d desc
Суть то не меняется

first_value(a) - будет брать исходящий остаток на 31.03.2007.
В последующем:
first_value(a) + b - c на 31,03,2007 - правильно.
first_value(a) + b - c на 30,03,2007 - нужно еще учесть обороты, за 31,03,2007 ! т.е.

first_value(a) + b ( от31,03,2007 ) - c (от 31,03,2007) + b ( от 30,03,2007 ) - c (от 30,03,2007)
5 апр 07, 14:01    [3984628]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
Elic
Member

Откуда:
Сообщений: 29977
никпик
нужно еще учесть обороты
Включи зрение и мозги :)
5 апр 07, 14:04    [3984641]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
никпик
Guest
Elic
никпик
поле а во всех строках принимает одинаковое значение, равное исходящему остатку на максимальную дату
Это какой же недоархитектор такое придумал?
a + sum(b - c) over (order by d desc) as m


естественно это объединение. Обратиться к базе можно только селектом. писать программные модули нет возможности.
5 апр 07, 14:04    [3984645]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
Elic
Member

Откуда:
Сообщений: 29977
никпик
естественно это объединение.
Соединение
5 апр 07, 14:08    [3984677]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
Goldminer
Member

Откуда:
Сообщений: 553
никпик
Goldminer
Тогда
order by d desc
Суть то не меняется

first_value(a) - будет брать исходящий остаток на 31.03.2007.
В последующем:
first_value(a) + b - c на 31,03,2007 - правильно.
first_value(a) + b - c на 30,03,2007 - нужно еще учесть обороты, за 31,03,2007 ! т.е.

first_value(a) + b ( от31,03,2007 ) - c (от 31,03,2007) + b ( от 30,03,2007 ) - c (от 30,03,2007)

Внимательно читайте, что Вам пишут.
+ Это
5 апр 07, 14:10    [3984687]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
никпик
Guest
Elic
никпик
нужно еще учесть обороты
Включи зрение и мозги :)


Исходя из этого:
поле а во всех строках принимает одинаковое значение, равное исходящему остатку на максимальную дату
немогу понять как использовать first_value()
5 апр 07, 14:12    [3984708]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
Volder
Member

Откуда: Москва
Сообщений: 474
никпик

немогу понять как использовать first_value()

сдался тебе этот first_value, у тебя "a" везде одинаковый
тебе ж написали
Elic

a + sum(b - c) over (order by d desc) as m

а вообще, надеюсь, вы товарищ, не из банка, т.к. там еще активность/пассивность счетов надо проверять,
иначе твои мега алгоритмы не пройдут
5 апр 07, 14:17    [3984754]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
никпик
Guest
Goldminer

Внимательно читайте, что Вам пишут.
+ Это


Спасибо, разобрался!
5 апр 07, 14:18    [3984766]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
Goldminer
Member

Откуда:
Сообщений: 553
никпик
Elic
никпик
нужно еще учесть обороты
Включи зрение и мозги :)


Исходя из этого:
поле а во всех строках принимает одинаковое значение, равное исходящему остатку на максимальную дату
немогу понять как использовать first_value()

Тогда first_value не нужно (оно позволило бы обойтись без join'a). См. вариант Elica.
5 апр 07, 14:20    [3984787]     Ответить | Цитировать Сообщить модератору
 Re: никпик  [new]
никпик
Guest
Еще раз спасибо - действительно заклинился на first_value.
5 апр 07, 14:23    [3984812]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить