|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Доброго времени суток! Подскажите, как с помощью оконных (аналитических) функций найти значение нужного столбца по значению другого. Пример: select формирует таблицу, где в первом столбце идут даты (st0), в остальных (st1, st2, st3...) какие-то значения. Надо с текущей позиции select найти значение st3, соответствующее определенной дате, находящейся выше текущей на неопределенное количество строк, т.е. по значению даты. Простой lag предполагает знание точного количества строк, на которые поднимаешься. А как по значению? Или как правильно указать условие равенства дат? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 10:26 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, Приведите пример данных в формате Код: plsql 1.
и образец желаемого результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 10:38 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 10:39 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
AmKad, + ignore nulls. Поправил предыдущее сообщение. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 10:40 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
env, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Результат: В строке с датой '12.10.2020' надо, допустим, значение fld2 сделать равным значению fld3 на у даты '10.10.2020'. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 10:53 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
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.
...... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 10:54 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 env, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Результат: В строке с датой '12.10.2020' надо, допустим , значение fld2 сделать равным значение fld3 на у даты '10.10.2020'. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 10:54 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
andreymx, это всего лишь пример. Мой реальный пример намного сложнее. Допустим - это значит один из возможных вариантов равенства. Считайте, что именно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 10:57 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
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.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:05 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax, что-то не то. Смещение в lag не должно равняться значению fld2. Или я чего-то не понимаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:14 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Stax, что-то не то. Смещение в lag не должно равняться значению fld2. Или я чего-то не понимаю... ето я не понимаю что Вам надо смещение (в строках!) задается в столбце fld2 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:24 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax, оно нигде не задается. Есть таблица с полями fld0(с датами), fld1(со значениями 1), fld2(со значениями 2), fld3(со значениями 3). Надо каждое значение fld2 поменять на значение fld3, соответствующее конкретной дате (в примере это '10.10.2020') - конкретное смещение не известно. Известно только то, что эта дата находится выше текущей (на которой курсор select). Тут вероятно что-то типо: max() keep (dense_rank ...) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:28 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, Вы задачу-то свою сформулируйте без "допустим" и "возможно". Пока что логика выбора строк не понятна. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:32 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Известно только то, что эта дата находится выше текущей Любая дата выше текущей? Критерии внятно пропишите, без этого решать нечего. Приведите пример на десяток строк, ожидаемый результат и пояснение - "выбрана из строки N потому что..." ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:33 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
env, читайте постом выше ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:34 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, откуда берется 10.10.2020? параметр? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:34 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
env, любая соответствующая значению, например sysdate. Объясняю смысл: ищется последняя дата предыдущего месяца и смотрится значение fld3 на эту дату. Найденное значение используется при расчете текущего значения fld2 по текущей дате. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:36 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 ищется последняя дата предыдущего месяца О, наконец-то конкретика пошла. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:41 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
env, я думал описанного выше хватит для понимания. А расчёт значения даты может быть любым. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:42 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 env, я думал описанного выше хватит для понимания. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:43 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
AmKad, пример был универсальный. Если я не так выразился и не указал слово "константа" - это мой промах. Надеюсь теперь с условием проблем нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:46 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, Так вам в ответ и дали универсальное решение ) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:47 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Надеюсь теперь с условием проблем нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:49 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Давайте ещё раз, чтобы не было вопросов по условию: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Что надо найти: Значение fld3 на последний день предыдущего месяца. Т.е. для строки с датой '05.11.2020' это значение будет равно '11'. В условии может быть несколько строк по дате '31.10.2020' - в таком случае берётся последняя в сортировке (сортировать можно по id). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 11:56 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 В условии может быть несколько строк по дате '31.10.2020'. Да что ж из вас клещами всё тянуть-то надо. И какую из них тогда брать? Выдохните. Сформулируйте свою проблему максимально полно. У форумчан нет вашего контекста для восстановления лакун в описании. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 12:00 |
|
|
start [/forum/topic.php?fid=52&msg=40019279&tid=1880632]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 282ms |
total: | 413ms |
0 / 0 |