Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: Использование оконных (аналитических) функций  [new]
ARRay001
Member

Откуда:
Сообщений: 50
env,
добавил коммент в условие выше. Сортировка по id не обязательна, так как даты итак будут отсортированы по времени.

Сообщение было отредактировано: 17 ноя 20, 12:01
17 ноя 20, 12:03    [22233605]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
AmKad
Member

Откуда:
Сообщений: 5222
with t1 (id, date1, fld2, fld3) as
(
              select 111, to_date('31.10.2019', 'DD.MM.YYYY'), 10, '11' from dual
    union all select 222, to_date('01.11.2019', 'DD.MM.YYYY'), 15, '22' from dual
    union all select 333, to_date('05.11.2019', 'DD.MM.YYYY'), 30, '43' from dual
    union all select 111, to_date('26.08.2020', 'DD.MM.YYYY'), 10, '07' from dual
    union all select 111, to_date('28.09.2020', 'DD.MM.YYYY'), 10, '10' from dual
    union all select 111, to_date('30.09.2020', 'DD.MM.YYYY'), 10, '09' from dual
    union all select 111, to_date('30.10.2020', 'DD.MM.YYYY'), 10, '11' from dual
    union all select 111, to_date('31.10.2020', 'DD.MM.YYYY'), 10, '11' from dual
    union all select 222, to_date('01.11.2020', 'DD.MM.YYYY'), 15, '22' from dual
    union all select 333, to_date('05.11.2020', 'DD.MM.YYYY'), 30, '43' from dual    
)
select t1.*,
last_value(decode(last_day(date1), date1, fld3) ignore nulls) 
    over (order by trunc(date1, 'month') range between interval '1' month preceding and interval '1' month preceding) lv
from t1
order by date1;

        ID DATE1             FLD2 FLD3 LV
---------- ----------- ---------- ---- --
       111 31.10.2019          10 11   
       222 01.11.2019          15 22   11
       333 05.11.2019          30 43   11
       111 26.08.2020          10 07   
       111 28.09.2020          10 10   
       111 30.09.2020          10 09   
       111 30.10.2020          10 11   09
       111 31.10.2020          10 11   09
       222 01.11.2020          15 22   11
       333 05.11.2020          30 43   11

10 rows selected
17 ноя 20, 12:11    [22233611]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
123йй
Member

Откуда:
Сообщений: 1639
ARRay001
Сортировка по id не обязательна, так как даты итак будут отсортированы по времени.


date1 содержит время ?
17 ноя 20, 12:25    [22233615]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
ARRay001
Member

Откуда:
Сообщений: 50
AmKad,
интересное решение - надо осознать до конца и проверить у себя. Спасибо!
17 ноя 20, 12:26    [22233618]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
ARRay001
Member

Откуда:
Сообщений: 50
123йй,
к сожалению, оказалось, что не содержит. Но и повторов в конкретной выборке, скорее всего не будет. Так что, прошу прощения - условие упрощается. Сортировки по одной дате не нужно.
17 ноя 20, 12:32    [22233626]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
Stax
Member

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

не будет ли last_value плавающим/случайным из-за неуникальной сортировки order by trunc(date1, 'month')?

.....
stax
17 ноя 20, 13:10    [22233663]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
AmKad
Member

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

не будет ли last_value плавающим/случайным из-за неуникальной сортировки order by trunc(date1, 'month')?

.....
stax
Буйки ограничивают плавающих предыдущим месяцем. А вот чтобы не было коллизий с определением последней даты месяца - нужно, чтобы не было ее повторений.
17 ноя 20, 13:26    [22233672]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
AmKad
Stax
AmKad,

не будет ли last_value плавающим/случайным из-за неуникальной сортировки order by trunc(date1, 'month')?

.....
stax
Буйки ограничивают плавающих предыдущим месяцем. А вот чтобы не было коллизий с определением последней даты месяца - нужно, чтобы не было ее повторений.

допустим date1 без повторений но trunc(date1, 'month') для сортировки уже с повторениями (первое число)


.....
stax
17 ноя 20, 15:21    [22233858]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
ARRay001
Member

Откуда:
Сообщений: 50
Задачка опять видоизменилась. Берётся не последний день месяца, а последний день месяца, имеющийся в списке дат. Т.е. любая последняя дата предыдущего месяца. Наверное изменится интервал?
19 ноя 20, 15:51    [22235462]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
ARRay001
Задачка опять видоизменилась. Берётся не последний день месяца, а последний день месяца, имеющийся в списке дат. Т.е. любая последняя дата предыдущего месяца. Наверное изменится интервал?


не совсем понятно
мож достаточно убрать last_day

SQL> ed
Wrote file afiedt.buf

  1  with t1 (id, date1, fld2, fld3) as
  2  (
  3                select 111, to_date('17.10.2019', 'DD.MM.YYYY'), 10, '11' from dual
  4      union all select 222, to_date('01.11.2019', 'DD.MM.YYYY'), 15, '22' from dual
  5      union all select 333, to_date('05.11.2019', 'DD.MM.YYYY'), 30, '43' from dual
  6      union all select 111, to_date('26.08.2020', 'DD.MM.YYYY'), 10, '07' from dual
  7      union all select 111, to_date('28.09.2020', 'DD.MM.YYYY'), 12, '10' from dual
  8      union all select 111, to_date('22.10.2020', 'DD.MM.YYYY'), 14, '13' from dual
  9      union all select 111, to_date('27.10.2020', 'DD.MM.YYYY'), 15, '17' from dual
 10      union all select 222, to_date('01.11.2020', 'DD.MM.YYYY'), 16, '22' from dual
 11      union all select 333, to_date('05.11.2020', 'DD.MM.YYYY'), 30, '43' from dual
 12  )
 13  select t1.*,
 14  --last_value(decode(last_day(date1), date1, fld3) ignore nulls)
 15  last_value(fld3 ignore nulls)
 16      over (order by trunc(date1, 'month') range between interval '1' month preceding and interval '1' month preceding) lv
 17  from t1
 18* order by date1
SQL> /

        ID DATE1            FLD2 FL LV
---------- ---------- ---------- -- --
       111 17.10.2019         10 11
       222 01.11.2019         15 22 11
       333 05.11.2019         30 43 11
       111 26.08.2020         10 07
       111 28.09.2020         12 10 07
       111 22.10.2020         14 13 10
       111 27.10.2020         15 17 10
       222 01.11.2020         16 22 17
       333 05.11.2020         30 43 17

9 rows selected.

SQL>


.....
stax
19 ноя 20, 16:00    [22235471]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
Stax
Member

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

я не могу понять (токо время потратил вместо чтоб ...) как работает order by trunc(date1, 'month') range between interval '1' month preceding and interval '1' month preceding

сделал влоб (наверняка красивее можно напр exact day и тд)

мож пригодится



SQL> ed
Wrote file afiedt.buf

  1  with t1 (id, date1, fld2, fld3) as
  2  (
  3                select 1, to_date('30.10.2019', 'DD.MM.YYYY'), 10, '1122      ' from dual
  4      union all select 2, to_date('01.11.2019', 'DD.MM.YYYY'), 15, '22' from dual
  5      union all select 3, to_date('25.11.2019', 'DD.MM.YYYY'), 30, '40' from dual
  6      union all select 4, to_date('20.11.2019', 'DD.MM.YYYY'), 30, '44' from dual
  7      union all select 5, to_date('27.11.2019', 'DD.MM.YYYY'), 30, '41' from dual
  8      union all select 6, to_date('05.11.2019', 'DD.MM.YYYY'), 30, '06' from dual
  9      union all select 7, to_date('11.12.2019', 'DD.MM.YYYY'), 10, '07' from dual
 10      union all select 8, to_date('01.12.2019', 'DD.MM.YYYY'), 10, '57' from dual
 11      union all select 9, to_date('28.09.2020', 'DD.MM.YYYY'), 12, '10' from dual
 12      union all select 10, to_date('27.10.2020', 'DD.MM.YYYY'), 14, '13' from dual
 13      union all select 11, to_date('23.10.2020', 'DD.MM.YYYY'), 15, '17' from dual
 14      union all select 12, to_date('01.11.2020', 'DD.MM.YYYY'), 16, '22' from dual
 15      union all select 13, to_date('05.11.2020', 'DD.MM.YYYY'), 30, '43' from dual
 16  )
 17  select t1.*,
 18  last_value(fld3)
 19      over (order by date1 range between to_char(date1,'dd')+to_char(trunc(date1,'mm')-1,'dd')-1 preceding
 20                                    and  to_char(date1,'dd') preceding) prev_month
 21  from t1
 22* order by date1
SQL> /

        ID DATE1            FLD2 FLD3       PREV_MONTH
---------- ---------- ---------- ---------- ----------
         1 30.10.2019         10 1122
         2 01.11.2019         15 22         1122
         6 05.11.2019         30 06         1122
         4 20.11.2019         30 44         1122
         3 25.11.2019         30 40         1122
         5 27.11.2019         30 41         1122
         8 01.12.2019         10 57         41
         7 11.12.2019         10 07         41
         9 28.09.2020         12 10
        11 23.10.2020         15 17         10
        10 27.10.2020         14 13         10
        12 01.11.2020         16 22         13
        13 05.11.2020         30 43         13

13 rows selected.


.....
stax

Сообщение было отредактировано: 19 ноя 20, 17:37
19 ноя 20, 17:41    [22235569]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
AmKad
Member

Откуда:
Сообщений: 5222
ARRay001
Задачка опять видоизменилась. Берётся не последний день месяца, а последний день месяца, имеющийся в списке дат. Т.е. любая последняя дата предыдущего месяца. Наверное изменится интервал?
Stax

мож достаточно убрать last_day

 15  last_value(fld3 ignore nulls)
 16      over (order by trunc(date1, 'month') range between interval '1' month preceding and interval '1' month preceding) lv
В этом случае не гарантируется сортировка дат внутри месяца.
19 ноя 20, 18:26    [22235608]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
AmKad
Member

Откуда:
Сообщений: 5222
ARRay001
Задачка опять видоизменилась. Берётся не последний день месяца, а последний день месяца, имеющийся в списке дат. Т.е. любая последняя дата предыдущего месяца.

last_value(fld3) over 
    (order by date1 range between date1 - add_months(trunc(date1, 'month'), -1) preceding 
                              and date1            - trunc(date1, 'month') + 1  preceding) lv
19 ноя 20, 18:27    [22235612]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
Stax
Member

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

ARRay001
Задачка опять видоизменилась. Берётся не последний день месяца, а последний день месяца, имеющийся в списке дат. Т.е. любая последняя дата предыдущего месяца. Наверное изменится интервал?
Stax

мож достаточно убрать last_day

 15  last_value(fld3 ignore nulls)
 16      over (order by trunc(date1, 'month') range between interval '1' month preceding and interval '1' month preceding) lv
В этом случае не гарантируется сортировка дат внутри месяца.


22233858

я вообще не понял как оно работает (какое окно выщитывает)
  1  with t1 (id, date1, fld2, fld3) as
  2  (
  3                select 1, to_date('30.10.2019', 'DD.MM.YYYY'), 10, '1122      ' from dual
  4      union all select 2, to_date('01.11.2019', 'DD.MM.YYYY'), 15, '22' from dual
  5      union all select 3, to_date('25.11.2019', 'DD.MM.YYYY'), 30, '40' from dual
  6      union all select 4, to_date('20.11.2019', 'DD.MM.YYYY'), 30, '44' from dual
  7      union all select 5, to_date('27.11.2019', 'DD.MM.YYYY'), 30, '41' from dual
  8      union all select 6, to_date('05.11.2019', 'DD.MM.YYYY'), 30, '06' from dual
  9      union all select 7, to_date('11.12.2019', 'DD.MM.YYYY'), 10, '07' from dual
 10      union all select 8, to_date('01.12.2019', 'DD.MM.YYYY'), 10, '57' from dual
 11      union all select 9, to_date('28.09.2020', 'DD.MM.YYYY'), 12, '10' from dual
 12      union all select 10, to_date('27.10.2020', 'DD.MM.YYYY'), 14, '13' from dual
 13      union all select 11, to_date('23.10.2020', 'DD.MM.YYYY'), 15, '17' from dual
 14      union all select 12, to_date('01.11.2020', 'DD.MM.YYYY'), 16, '22' from dual
 15      union all select 13, to_date('05.11.2020', 'DD.MM.YYYY'), 30, '43' from dual
 16  )
 17  select t1.*,
 18  last_value(fld3)
 19      over (order by date1 range between to_char(date1,'dd')+to_char(trunc(date1,'mm')-1,'dd')-1 preceding
 20                                    and  to_char(date1,'dd') preceding) prev_month
 21  ,last_value(fld3 ignore nulls)
 22        over (order by trunc(date1, 'month') range between interval '1' month preceding and interval '1' month preceding) lv_interval
 23  from t1
 24* order by date1
SQL> /

        ID DATE1            FLD2 FLD3       PREV_MONTH LV_INTERVA
---------- ---------- ---------- ---------- ---------- ----------
         1 30.10.2019         10 1122
         2 01.11.2019         15 22         1122       1122
         6 05.11.2019         30 06         1122       1122
         4 20.11.2019         30 44         1122       1122
         3 25.11.2019         30 40         1122       1122
         5 27.11.2019         30 41         1122       1122
         8 01.12.2019         10 57         41         44
         7 11.12.2019         10 07         41         44
         9 28.09.2020         12 10
        11 23.10.2020         15 17         10         10
        10 27.10.2020         14 13         10         10
        12 01.11.2020         16 22         13         17
        13 05.11.2020         30 43         13         17

13 rows selected.


зі
забыл за -1 add_month (старость)

.....
stax
19 ноя 20, 18:36    [22235626]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
AmKad
Member

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

order by trunc(date1, 'month') range between interval '1' month preceding and interval '1' month preceding)
Это имело смысл только для первичной постановки задачи вкупе с last_day + ignore nulls. Для новой постановки такая сортировка не подходит.
19 ноя 20, 18:46    [22235633]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
ARRay001
Member

Откуда:
Сообщений: 50
Однако, за время пути... опять новость: надо ещё эту дату сравнивать с результатом запроса, который показывает выходной это или нет. Если выходной, то брать первый день следующего месяца вместо последней даты из предыдущего месяца...
Запрос вида: select t.wd from wdate t where t.date = date1, где t.wd = 0 - не рабочие дни, 1 - рабочие

Сообщение было отредактировано: 23 ноя 20, 14:51
23 ноя 20, 14:55    [22237242]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
ARRay001,

Сделайте уже календарь со всеми необходимыми датами и признаками
23 ноя 20, 15:25    [22237267]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
Stax
Member

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

то брать первый день следующего месяца вместо последней даты из предыдущего месяца...


а потом окажется что первый день следующего месяца выходной и надо ...

зы
рассчитайте два поля 1-последний день пред. месяца и первый день текущего (если я правильно понял)
и в зависимости от выходного выбирайте одну из зол

зыы
мож проще создать ф-цию и в ней "любе"

.....
stax
23 ноя 20, 15:27    [22237268]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
ARRay001
Member

Откуда:
Сообщений: 50
Stax,
функция не впишется в концепцию данного решения - это всё сначала делать в pl/sql.
Я бы делал что-то вроде: проверяю последнюю, имеющуюся в наличии, дату предыдущего месяца. Если она не вых - берём её, если вых - ищу первую имеющуюся рабочую дату следующего месяца. Вот как лучше запихнуть всё это в один аналитический запрос - что-то с case скорее всего...

Сообщение было отредактировано: 23 ноя 20, 15:31
23 ноя 20, 15:30    [22237271]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
Stax
Member

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

Вот как лучше запихнуть всё это в один аналитический запрос - что-то с case скорее всего...


как луче я не знаю, как через два поля я описал (если я правильно понимаю задачку)

приведите данные (with t1 (id, date1, fld2, fld3) as ... )
и что получить


.....
stax
23 ноя 20, 17:22    [22237364]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
ARRay001
env,

with t1 (id, date1, fld2, fld3) as
(
              select 111, to_date('10.10.2020', 'DD.MM.YYYY'), 10, '11' from dual
    union all select 222, to_date('11.10.2020', 'DD.MM.YYYY'), 15, '22' from dual
    union all select 333, to_date('12.10.2020', 'DD.MM.YYYY'), 30, '43' from dual
    
)
select t1.*
from t1;


Результат: В строке с датой '12.10.2020' надо, допустим, значение fld2 сделать равным значению fld3 на у даты '10.10.2020'.


Дословный ответ.

select id, date1, 
       case date1 when to_date('12.10.2020', 'DD.MM.YYYY')
                  then to_number((select max(fld3) from t1 where date1=to_date('10.10.2020', 'DD.MM.YYYY'))) 
                  else fld2 end,
       fld3
       from t1;
23 ноя 20, 19:30    [22237444]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
ARRay001
Задачка опять видоизменилась. Берётся не последний день месяца, а последний день месяца, имеющийся в списке дат. Т.е. любая последняя дата предыдущего месяца. Наверное изменится интервал?


Напишите новые таблицы задачи и желаемый результат,
чтобы не бегать между начальником и форумом "А это, правильный ответ?"

Добрая воля имеет пределы :)
23 ноя 20, 19:33    [22237445]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
ARRay001
Member

Откуда:
Сообщений: 50
Исходные данные не поменялись. Пример приводили много раз выше. Вот, вариант генерации:
with t1 (id, date1, fld2, fld3) as
(
              select 111, to_date('31.10.2019', 'DD.MM.YYYY'), 10, '11' from dual
    union all select 222, to_date('01.11.2019', 'DD.MM.YYYY'), 15, '22' from dual
    union all select 333, to_date('05.11.2019', 'DD.MM.YYYY'), 30, '43' from dual
    union all select 111, to_date('26.08.2020', 'DD.MM.YYYY'), 10, '07' from dual
    union all select 111, to_date('28.09.2020', 'DD.MM.YYYY'), 10, '10' from dual
    union all select 111, to_date('30.09.2020', 'DD.MM.YYYY'), 10, '09' from dual
    union all select 111, to_date('30.10.2020', 'DD.MM.YYYY'), 10, '11' from dual
    union all select 111, to_date('31.10.2020', 'DD.MM.YYYY'), 10, '11' from dual
    union all select 222, to_date('01.11.2020', 'DD.MM.YYYY'), 15, '22' from dual
    union all select 333, to_date('05.11.2020', 'DD.MM.YYYY'), 30, '43' from dual    
)
select t1.*,
 last_value(fld3) over 
    (order by date1 range between date1 - add_months(trunc(date1, 'month'), -1) preceding 
                              and date1            - trunc(date1, 'month') + 1  preceding) lv
from t1
order by date1;


В данном примере находится значение lv, равное значению fld3 по последней дате из предыдущего месяца, имеющейся в таблице (НЕ ПОСЛЕДНЕЙ ДАТЕ предыдущего месяца, а ПОСЛЕДНЕЙ ИМЕЮЩЕЙСЯ ДАТЕ предыдущего месяца).
Задача: видоизменить расчёт lv, чтобы если последняя имеющаяся дата предыдущего месяца является выходным днём (т.е. сравнивается с результатом из таблицы с датами select t.wd from wdate t where t.date = date1, где t.wd = 0 - не рабочие дни, 1 - рабочие), то берётся первая имеющаяся рабочая дата следующего имеющегося в наличии месяца.
25 ноя 20, 12:12    [22238245]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
Stax
Member

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

'30.09.2020' и '30.10.2020' выходные
для
union all select 111, to_date('30.10.2020', 'DD.MM.YYYY'), 10, '11' from dual
что насчитаете?

ps
желательно ид сделать уникальными, так легче общатся

.....
stax
25 ноя 20, 14:15    [22238331]     Ответить | Цитировать Сообщить модератору
 Re: Использование оконных (аналитических) функций  [new]
ARRay001
Member

Откуда:
Сообщений: 50
Опять прошу прощения за некорректную постановку, но наконец сам понял что именно надо:
Исходные данные (вариант генерации):
with t1 (id, date1, fld2, fld3) as
(
              select 111, to_date('31.10.2019', 'DD.MM.YYYY'), 10, '11' from dual
    union all select 222, to_date('01.11.2019', 'DD.MM.YYYY'), 15, '22' from dual
    union all select 333, to_date('05.11.2019', 'DD.MM.YYYY'), 30, '43' from dual
    union all select 111, to_date('26.08.2020', 'DD.MM.YYYY'), 10, '07' from dual
    union all select 111, to_date('28.09.2020', 'DD.MM.YYYY'), 10, '10' from dual
    union all select 111, to_date('30.09.2020', 'DD.MM.YYYY'), 10, '09' from dual
    union all select 111, to_date('30.10.2020', 'DD.MM.YYYY'), 10, '11' from dual
    union all select 111, to_date('31.10.2020', 'DD.MM.YYYY'), 10, '11' from dual
    union all select 222, to_date('01.11.2020', 'DD.MM.YYYY'), 15, '22' from dual
    union all select 222, to_date('02.11.2020', 'DD.MM.YYYY'), 15, '22' from dual
    union all select 333, to_date('05.11.2020', 'DD.MM.YYYY'), 30, '43' from dual    
)
select t1.*,
 last_value(fld3) over 
    (order by date1 range between date1 - add_months(trunc(date1, 'month'), -1) preceding 
                              and date1            - trunc(date1, 'month') + 1  preceding) lv
from t1
order by date1;


В данном примере находится значение lv, равное значению fld3 по последней дате из предыдущего месяца, имеющейся в таблице (НЕ ПОСЛЕДНЕЙ ДАТЕ предыдущего месяца, а ПОСЛЕДНЕЙ ИМЕЮЩЕЙСЯ ДАТЕ предыдущего месяца).
Задача: если если текущая дата конца месяца (здесь '31.10.2020' суббота) является выходным днём (т.е. сравнивается с результатом из таблицы с датами select t.wd from wdate t where t.date = date1, где t.wd = 0 - не рабочие дни, 1 - рабочие), то вычисленное значение lv ставится в fld2, соответствующее первой имеющейся рабочей дате (здесь это '02.11.2020') следующего имеющегося в наличии месяца (ближайшая дата следующего месяца обязательно будет присутствовать). Если текущая дата конца месяца рабочая, то значение lv подставляется в fld2 по текущей дате.
Трудновато выделить всё в отдельный пример. Изменится структура данного запроса.

Сообщение было отредактировано: 25 ноя 20, 17:15
25 ноя 20, 17:19    [22238391]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Oracle Ответить