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

Откуда:
Сообщений: 8
-- creating table
create table test (
Date_otc date,
Amount number)

-- inserting test data
insert into test (Date_otc, Amount) values(TO_DATE('2007.01.01', 'YYYY.MM.DD'), 100)
insert into test (Date_otc, Amount) values(TO_DATE('2007.02.01', 'YYYY.MM.DD'), 100)
insert into test (Date_otc, Amount) values(TO_DATE('2007.03.01', 'YYYY.MM.DD'), 100)
insert into test (Date_otc, Amount) values(TO_DATE('2007.04.01', 'YYYY.MM.DD'), 100)
insert into test (Date_otc, Amount) values(TO_DATE('2007.05.01', 'YYYY.MM.DD'), 100)

Есть запрос, который выдает дату и сумму SELECT * FROM test
Нужен запрос, который вычетает определенную сумму с начала первоначального запроса. Например:

Первоначальный запрос

Date_otc Amount
2007.01.01 100.00
2007.02.01 100.00
2007.03.01 100.00
2007.04.01 100.00
2007.05.01 100.00

Вычитаем с начала сумму 350-00, должны получить запрос:

Date_otc Amount
2007.01.01 0.00
2007.02.01 0.00
2007.03.01 0.00
2007.04.01 50.00
2007.05.01 100.00
10 дек 07, 07:42    [5024677]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пж. с запросом!  [new]
UDW
Member

Откуда: Самара
Сообщений: 1096
Почитайте в доке по SQL описание функции SUM().
Там как раз Ваш случай описан в одном из примеров.
10 дек 07, 08:03    [5024691]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пж. с запросом!  [new]
htreh
Guest
select date_otc, amount, greatest(sum(amount) over(order by date_otc) - 350,0)
  from test
10 дек 07, 08:55    [5024779]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пж. с запросом!  [new]
htreh
Guest
htreh
select date_otc, amount, greatest(sum(amount) over(order by date_otc) - 350,0)
  from test

Хотя, под исходный вопрос больше вот такой вариант подойдет:
select date_otc, amount, 
       greatest(sum(amount) over(order by date_otc) - 350,0) as new_amount_1,
       least(greatest(sum(amount) over(order by date_otc) - 350,0),amount) as new_amount_2
  from test
10 дек 07, 09:00    [5024787]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пж. с запросом!  [new]
AлёLLIa
Member

Откуда:
Сообщений: 8
htreh
Хотя, под исходный вопрос больше вот такой вариант подойдет:
select date_otc, amount, 
       greatest(sum(amount) over(order by date_otc) - 350,0) as new_amount_1,
       least(greatest(sum(amount) over(order by date_otc) - 350,0),amount) as new_amount_2
  from test


2 вариант действительно подходит больше. Спасибо огромное. Я пытался использовать аналитические функции, но вот как это сделать через SUM - не допер.
10 дек 07, 09:14    [5024819]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить