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

Откуда:
Сообщений: 158
Есть таблица.

Как получить колонку PAY_DATE ?

ID  LAST_DATE        INITIAL_AMOUNT   PAY_AMOUNT      NUM         PAY_DATE
10   6/3/2011    200              200                  1          6/3/2011 
20   7/4/2011    300              120                  2          9/2/2011 
33   9/2/2011    400              300                  3          10/3/2011
44   10/3/2011   500              500                  4          11/30/2011             
55   10/31/2011  600              100                  5
66   11/30/2011  700              600                  6


INITIAL_AMOUNT если >= PAY_AMOUNT тогда LAST_DATE.

Если не равно записать ту дату в каком NUMS она была равна
4 ноя 19, 14:58    [22009380]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
Frequency
Member

Откуда:
Сообщений: 158
извиняюсь PAY_AMOUNT >= INITIAL_AMOUNT
4 ноя 19, 15:07    [22009390]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
Frequency
Member

Откуда:
Сообщений: 158
Frequency

NUMS она была равна


NUM равна или больше
4 ноя 19, 15:13    [22009394]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9635
Subquery.

SY.
4 ноя 19, 16:38    [22009431]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
Frequency
Member

Откуда:
Сообщений: 158
SY
Subquery.

SY.


Буду очень благодарен если пожете , на примере выборки. Спасибо
4 ноя 19, 23:19    [22009593]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
AmKad
Member

Откуда:
Сообщений: 5111
Frequency
Буду очень благодарен если пожете , на примере выборки. Спасибо
Я бы в меру своей бестолковости может быть и попытался бы помочь, он опять-таки в меру все той же не смог понять, что требуется.
5 ноя 19, 09:10    [22009715]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2012
Frequency,

почему для ід=55 пусто, а не 11/30/2011 (num=6) ?

.....
stax
5 ноя 19, 09:42    [22009739]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
Frequency
Member

Откуда:
Сообщений: 158
Постараюсь объяснить, в меру своей бестолковости (признаюсь).

Рассмотрим еще раз таблицу которую я отправил.

Нужно сравнивать каждый INITIAL_AMOUNT с каждым PAY_AMOUNT.
Если удовлетворяет условию PAY_AMOUNT >= INITIAL_AMOUNT , вывести в PAY_DATE ту дату где она удовлетворяла, как в таблице указал.

То есть :

В 1-ой строке норм.
Во 2-ой строке сравниваем INITIAL_AMOUNT = 300 с PAY_AMOUNT = 120 , не равно. Сравниваем INITIAL_AMOUNT = 300 с 3-ей строкой где PAY_AMOUNT = 300 тут норм записываем PAY_DATE 9/2/2011.

И так далее.
5 ноя 19, 11:24    [22009812]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2012
Frequency


И так далее.

то же самое распишитте для
55 10/31/2011 600 100

почему пусто, а не 11/30/2011?

.....
stax
5 ноя 19, 11:48    [22009834]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2012
Frequency,

SQL> ed
Wrote file afiedt.buf

  1  with t (ID,  LAST_DATE,        INITIAL_AMOUNT,   PAY_AMOUNT,      NUM) as (
  2  select 10,to_date('   6/3/2011','mm/dd/yyyy'),    200,200,                  1 from dual union all
  3  select 20,to_date('   7/4/2011','mm/dd/yyyy'),    300,120,                  2 from dual union all
  4  select 33,to_date('   9/2/2011','mm/dd/yyyy'),    250,300,                  3 from dual union all
  5  select 44,to_date('   10/3/2011','mm/dd/yyyy'),   500,500,                  4 from dual union all
  6  select 55,to_date('   10/31/2011','mm/dd/yyyy'),  600,100,                  5 from dual union all
  7  select 66,to_date('   11/30/2011','mm/dd/yyyy'),  700,600,                  6 from dual)
  8  select t.*,
  9   case when PAY_AMOUNT >= INITIAL_AMOUNT then last_date
 10   else (select max/*min*/(last_date) from t t2 where t2.pay_amount=t.initial_amount)
 11   end PAY_DATE
 12* from t
SQL> /

        ID LAST_DAT INITIAL_AMOUNT PAY_AMOUNT        NUM PAY_DATE
---------- -------- -------------- ---------- ---------- --------
        10 03.06.11            200        200          1 03.06.11
        20 04.07.11            300        120          2 02.09.11
        33 02.09.11            250        300          3 02.09.11
        44 03.10.11            500        500          4 03.10.11
        55 31.10.11            600        100          5 30.11.11
        66 30.11.11            700        600          6

6 rows selected.


в какой строке неправильный PAY_DATE и почему?

.....
stax
5 ноя 19, 12:00    [22009846]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
Frequency
Member

Откуда:
Сообщений: 158
Stax
Frequency


И так далее.

то же самое распишитте для
55 10/31/2011 600 100

почему пусто, а не 11/30/2011?

.....
stax



да да все верно
5 ноя 19, 12:06    [22009851]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
Frequency
Member

Откуда:
Сообщений: 158
Stax
Frequency,

 10   else (select max/*min*/(last_date) from t t2 where t2.pay_amount=t.initial_amount)


.....
stax



если t2.pay_amount >= t.initial_amount тогда результат слетит
5 ноя 19, 13:07    [22009891]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
Frequency
Member

Откуда:
Сообщений: 158
то есть pay_amount и больше может быть
5 ноя 19, 13:20    [22009905]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение сум  [new]
Frequency
Member

Откуда:
Сообщений: 158
Stax
Frequency,

SQL> ed
Wrote file afiedt.buf

  1  with t (ID,  LAST_DATE,        INITIAL_AMOUNT,   PAY_AMOUNT,      NUM) as (
  2  select 10,to_date('   6/3/2011','mm/dd/yyyy'),    200,200,                  1 from dual union all
  3  select 20,to_date('   7/4/2011','mm/dd/yyyy'),    300,120,                  2 from dual union all
  4  select 33,to_date('   9/2/2011','mm/dd/yyyy'),    250,300,                  3 from dual union all
  5  select 44,to_date('   10/3/2011','mm/dd/yyyy'),   500,500,                  4 from dual union all
  6  select 55,to_date('   10/31/2011','mm/dd/yyyy'),  600,100,                  5 from dual union all
  7  select 66,to_date('   11/30/2011','mm/dd/yyyy'),  700,600,                  6 from dual)
  8  select t.*,
  9   case when PAY_AMOUNT >= INITIAL_AMOUNT then last_date
 10   else (select max/*min*/(last_date) from t t2 where t2.pay_amount=t.initial_amount)
 11   end PAY_DATE
 12* from t
SQL> /

        ID LAST_DAT INITIAL_AMOUNT PAY_AMOUNT        NUM PAY_DATE
---------- -------- -------------- ---------- ---------- --------
        10 03.06.11            200        200          1 03.06.11
        20 04.07.11            300        120          2 02.09.11
        33 02.09.11            250        300          3 02.09.11
        44 03.10.11            500        500          4 03.10.11
        55 31.10.11            600        100          5 30.11.11
        66 30.11.11            700        600          6

6 rows selected.


в какой строке неправильный PAY_DATE и почему?

.....
stax



Немного доработал , вариант с min(last_date) мне помог, спасибо большое. Очень помогли
5 ноя 19, 13:42    [22009915]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить