powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Использование оконных (аналитических) функций
25 сообщений из 96, страница 1 из 4
Использование оконных (аналитических) функций
    #40019279
ARRay001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Подскажите, как с помощью оконных (аналитических) функций найти значение нужного столбца по значению другого.
Пример: select формирует таблицу, где в первом столбце идут даты (st0), в остальных (st1, st2, st3...) какие-то значения.
Надо с текущей позиции select найти значение st3, соответствующее определенной дате, находящейся выше текущей на неопределенное количество строк, т.е. по значению даты.

Простой lag предполагает знание точного количества строк, на которые поднимаешься. А как по значению? Или как правильно указать условие равенства дат?
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019285
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001,

Приведите пример данных в формате
Код: plsql
1.
with t as ( select ....

и образец желаемого результата.
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019286
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
first_value/last_value(case when ... end ignore nulls) over (order by ... range/rows between ...)
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019287
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

+ ignore nulls. Поправил предыдущее сообщение.
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019290
ARRay001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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'.
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019291
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001,

окно в три строки и окно в три дня ето разные окнa



значение st3 на передыдущие st1 дня относительно текущего st0
Код: 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.
  1  with t as (
  2  select date '2020-01-01' st0, 1 st1,101 st3 from dual union all
  3  select date '2020-01-02' st0, 1 st1,102 st3 from dual union all
  4  select date '2020-01-03' st0, 2 st1,103 st3 from dual union all
  5  select date '2020-01-04' st0, 2 st1,104 st3 from dual union all
  6  select date '2020-01-10' st0, 7 st1,105 st3 from dual union all
  7  select date '2020-01-11' st0, 6 st1,106 st3 from dual union all
  8  select date '2020-01-12' st0, 2 st1,107 st3 from dual)
  9  select
 10   t.*
 11  ,first_value(st3) over (order by st0 range st1 preceding) f
 12* from t
SQL> /

ST0               ST1        ST3          F
---------- ---------- ---------- ----------
01.01.2020          1        101        101
02.01.2020          1        102        101
03.01.2020          2        103        101
04.01.2020          2        104        102
10.01.2020          7        105        103
11.01.2020          6        106        105
12.01.2020          2        107        105

7 rows selected.




......
stax
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019292
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001
env,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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'.
вы даже сами не уверены?
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019294
ARRay001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx,
это всего лишь пример. Мой реальный пример намного сложнее. Допустим - это значит один из возможных вариантов равенства. Считайте, что именно так.
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019298
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001,

Код: 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.
28.
29.
SQL> ed
Wrote file afiedt.buf

  1  with t1 (id, date1, fld2, fld3) as
  2  (
  3                select 111, to_date('10.10.2020', 'DD.MM.YYYY'), 1, '11' from dual
  4      union all select 222, to_date('11.10.2020', 'DD.MM.YYYY'), 2, '22' from dual
  5      union all select 333, to_date('12.10.2020', 'DD.MM.YYYY'), 2, '43' from dual
  6      union all select 444, to_date('13.10.2020', 'DD.MM.YYYY'), 3, '55' from dual
  7      union all select 555, to_date('14.10.2020', 'DD.MM.YYYY'), 2, '77' from dual
  8      union all select 777, to_date('15.10.2020', 'DD.MM.YYYY'), 4, '88' from dual
  9  )
 10  select t1.*
 11  ,lag(fld3,fld2) over (order by date1) l
 12* from t1
SQL> /

        ID DATE1            FLD2 FL L
---------- ---------- ---------- -- --
       111 10.10.2020          1 11
       222 11.10.2020          2 22
       333 12.10.2020          2 43 11
       444 13.10.2020          3 55 11
       555 14.10.2020          2 77 43
       777 15.10.2020          4 88 22

6 rows selected.

SQL>



.....
stax
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019303
ARRay001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
что-то не то. Смещение в lag не должно равняться значению fld2. Или я чего-то не понимаю...
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019308
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001
Stax,
что-то не то. Смещение в lag не должно равняться значению fld2. Или я чего-то не понимаю...


ето я не понимаю что Вам надо

смещение (в строках!) задается в столбце fld2

.....
stax
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019312
ARRay001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

оно нигде не задается. Есть таблица с полями fld0(с датами), fld1(со значениями 1), fld2(со значениями 2), fld3(со значениями 3).
Надо каждое значение fld2 поменять на значение fld3, соответствующее конкретной дате (в примере это '10.10.2020') - конкретное смещение не известно. Известно только то, что эта дата находится выше текущей (на которой курсор select).

Тут вероятно что-то типо: max() keep (dense_rank ...)
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019314
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001,

Вы задачу-то свою сформулируйте без "допустим" и "возможно". Пока что логика выбора строк не понятна.
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019317
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001
Известно только то, что эта дата находится выше текущей

Любая дата выше текущей? Критерии внятно пропишите, без этого решать нечего.

Приведите пример на десяток строк, ожидаемый результат и пояснение - "выбрана из строки N потому что..."
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019321
ARRay001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,
читайте постом выше
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019322
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001,

откуда берется 10.10.2020? параметр?

.....
stax
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019323
ARRay001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,
любая соответствующая значению, например sysdate. Объясняю смысл: ищется последняя дата предыдущего месяца и смотрится значение fld3 на эту дату. Найденное значение используется при расчете текущего значения fld2 по текущей дате.
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019327
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001
ищется последняя дата предыдущего месяца

О, наконец-то конкретика пошла.
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019328
ARRay001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

я думал описанного выше хватит для понимания. А расчёт значения даты может быть любым.
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019329
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001
env,

я думал описанного выше хватит для понимания.
А мы думали, тебе last_value/first_value хватит для понимания.
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019331
ARRay001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKad,
пример был универсальный. Если я не так выразился и не указал слово "константа" - это мой промах. Надеюсь теперь с условием проблем нет.
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019332
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001,

Так вам в ответ и дали универсальное решение )
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019334
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001
Надеюсь теперь с условием проблем нет.
Лично я уже потерял интерес от необходимости собирать задачу по крупицам с каждого твоего поста. Надеюсь, энтузиазма Stax-а еще хватит.
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019335
ARRay001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давайте ещё раз, чтобы не было вопросов по условию:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t1 (id, date1, fld2, fld3) as
(
              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.*
from t1;



Что надо найти: Значение fld3 на последний день предыдущего месяца. Т.е. для строки с датой '05.11.2020' это значение будет равно '11'. В условии может быть несколько строк по дате '31.10.2020' - в таком случае берётся последняя в сортировке (сортировать можно по id).
...
Рейтинг: 0 / 0
Использование оконных (аналитических) функций
    #40019339
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRay001
В условии может быть несколько строк по дате '31.10.2020'.

Да что ж из вас клещами всё тянуть-то надо. И какую из них тогда брать?

Выдохните. Сформулируйте свою проблему максимально полно. У форумчан нет вашего контекста для восстановления лакун в описании.
...
Рейтинг: 0 / 0
25 сообщений из 96, страница 1 из 4
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Использование оконных (аналитических) функций
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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