powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сравнение сум
14 сообщений из 14, страница 1 из 1
Сравнение сум
    #39884967
Фотография Frequency
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица.

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

Код: xml
1.
2.
3.
4.
5.
6.
7.
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 она была равна
...
Рейтинг: 0 / 0
Сравнение сум
    #39884973
Фотография Frequency
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извиняюсь PAY_AMOUNT >= INITIAL_AMOUNT
...
Рейтинг: 0 / 0
Сравнение сум
    #39884975
Фотография Frequency
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frequency

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


NUM равна или больше
...
Рейтинг: 0 / 0
Сравнение сум
    #39884999
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Subquery.

SY.
...
Рейтинг: 0 / 0
Сравнение сум
    #39885099
Фотография Frequency
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Subquery.

SY.


Буду очень благодарен если пожете , на примере выборки. Спасибо
...
Рейтинг: 0 / 0
Сравнение сум
    #39885147
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frequency
Буду очень благодарен если пожете , на примере выборки. Спасибо
Я бы в меру своей бестолковости может быть и попытался бы помочь, он опять-таки в меру все той же не смог понять, что требуется.
...
Рейтинг: 0 / 0
Сравнение сум
    #39885158
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frequency,

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

.....
stax
...
Рейтинг: 0 / 0
Сравнение сум
    #39885205
Фотография Frequency
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Постараюсь объяснить, в меру своей бестолковости (признаюсь).

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

Нужно сравнивать каждый 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.

И так далее.
...
Рейтинг: 0 / 0
Сравнение сум
    #39885211
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frequency


И так далее.

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

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

.....
stax
...
Рейтинг: 0 / 0
Сравнение сум
    #39885215
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frequency,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
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
...
Рейтинг: 0 / 0
Сравнение сум
    #39885219
Фотография Frequency
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Frequency


И так далее.

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

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

.....
stax



да да все верно
...
Рейтинг: 0 / 0
Сравнение сум
    #39885240
Фотография Frequency
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Frequency,

Код: plsql
1.
 10   else (select max/*min*/(last_date) from t t2 where t2.pay_amount=t.initial_amount)



.....
stax



если t2.pay_amount >= t.initial_amount тогда результат слетит
...
Рейтинг: 0 / 0
Сравнение сум
    #39885245
Фотография Frequency
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть pay_amount и больше может быть
...
Рейтинг: 0 / 0
Сравнение сум
    #39885252
Фотография Frequency
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Frequency,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
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) мне помог, спасибо большое. Очень помогли
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сравнение сум
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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