|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#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 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
env, добавил коммент в условие выше. Сортировка по id не обязательна, так как даты итак будут отсортированы по времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 12:03 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Код: 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. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 12:11 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Сортировка по id не обязательна, так как даты итак будут отсортированы по времени. date1 содержит время ? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 12:25 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
AmKad, интересное решение - надо осознать до конца и проверить у себя. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 12:26 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
123йй, к сожалению, оказалось, что не содержит. Но и повторов в конкретной выборке, скорее всего не будет. Так что, прошу прощения - условие упрощается. Сортировки по одной дате не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 12:32 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
AmKad, не будет ли last_value плавающим/случайным из-за неуникальной сортировки order by trunc(date1, 'month')? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 13:10 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax AmKad, не будет ли last_value плавающим/случайным из-за неуникальной сортировки order by trunc(date1, 'month')? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 13:26 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
AmKad Stax AmKad, не будет ли last_value плавающим/случайным из-за неуникальной сортировки order by trunc(date1, 'month')? ..... stax допустим date1 без повторений но trunc(date1, 'month') для сортировки уже с повторениями (первое число) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 15:21 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Задачка опять видоизменилась. Берётся не последний день месяца, а последний день месяца, имеющийся в списке дат. Т.е. любая последняя дата предыдущего месяца. Наверное изменится интервал? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 15:51 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Задачка опять видоизменилась. Берётся не последний день месяца, а последний день месяца, имеющийся в списке дат. Т.е. любая последняя дата предыдущего месяца. Наверное изменится интервал? не совсем понятно мож достаточно убрать last_day Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 16:00 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, я не могу понять (токо время потратил вместо чтоб ...) как работает order by trunc(date1, 'month') range between interval '1' month preceding and interval '1' month preceding сделал влоб (наверняка красивее можно напр exact day и тд) мож пригодится Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 17:41 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Задачка опять видоизменилась. Берётся не последний день месяца, а последний день месяца, имеющийся в списке дат. Т.е. любая последняя дата предыдущего месяца. Наверное изменится интервал? Stax мож достаточно убрать last_day Код: plsql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:26 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Задачка опять видоизменилась. Берётся не последний день месяца, а последний день месяца, имеющийся в списке дат. Т.е. любая последняя дата предыдущего месяца. Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:27 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
AmKad ARRay001 Задачка опять видоизменилась. Берётся не последний день месяца, а последний день месяца, имеющийся в списке дат. Т.е. любая последняя дата предыдущего месяца. Наверное изменится интервал? Stax мож достаточно убрать last_day Код: plsql 1. 2.
22233858 я вообще не понял как оно работает (какое окно выщитывает) Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
зі забыл за -1 add_month (старость) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:36 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:46 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Однако, за время пути... опять новость: надо ещё эту дату сравнивать с результатом запроса, который показывает выходной это или нет. Если выходной, то брать первый день следующего месяца вместо последней даты из предыдущего месяца... Запрос вида: select t.wd from wdate t where t.date = date1, где t.wd = 0 - не рабочие дни, 1 - рабочие ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 14:55 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, Сделайте уже календарь со всеми необходимыми датами и признаками ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 15:25 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 то брать первый день следующего месяца вместо последней даты из предыдущего месяца... а потом окажется что первый день следующего месяца выходной и надо ... зы рассчитайте два поля 1-последний день пред. месяца и первый день текущего (если я правильно понял) и в зависимости от выходного выбирайте одну из зол зыы мож проще создать ф-цию и в ней "любе" ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 15:27 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax, функция не впишется в концепцию данного решения - это всё сначала делать в pl/sql. Я бы делал что-то вроде: проверяю последнюю, имеющуюся в наличии, дату предыдущего месяца. Если она не вых - берём её, если вых - ищу первую имеющуюся рабочую дату следующего месяца. Вот как лучше запихнуть всё это в один аналитический запрос - что-то с case скорее всего... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 15:30 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Вот как лучше запихнуть всё это в один аналитический запрос - что-то с case скорее всего... как луче я не знаю, как через два поля я описал (если я правильно понимаю задачку) приведите данные (with t1 (id, date1, fld2, fld3) as ... ) и что получить ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 17:22 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 env, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Результат: В строке с датой '12.10.2020' надо, допустим, значение fld2 сделать равным значению fld3 на у даты '10.10.2020'. Дословный ответ. Код: plsql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 19:30 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Задачка опять видоизменилась. Берётся не последний день месяца, а последний день месяца, имеющийся в списке дат. Т.е. любая последняя дата предыдущего месяца. Наверное изменится интервал? Напишите новые таблицы задачи и желаемый результат, чтобы не бегать между начальником и форумом "А это, правильный ответ?" Добрая воля имеет пределы :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 19:33 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Исходные данные не поменялись. Пример приводили много раз выше. Вот, вариант генерации: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
В данном примере находится значение lv, равное значению fld3 по последней дате из предыдущего месяца, имеющейся в таблице (НЕ ПОСЛЕДНЕЙ ДАТЕ предыдущего месяца, а ПОСЛЕДНЕЙ ИМЕЮЩЕЙСЯ ДАТЕ предыдущего месяца). Задача: видоизменить расчёт lv, чтобы если последняя имеющаяся дата предыдущего месяца является выходным днём (т.е. сравнивается с результатом из таблицы с датами select t.wd from wdate t where t.date = date1, где t.wd = 0 - не рабочие дни, 1 - рабочие), то берётся первая имеющаяся рабочая дата следующего имеющегося в наличии месяца. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 12:12 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
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.11.2020, 14:15 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Опять прошу прощения за некорректную постановку, но наконец сам понял что именно надо: Исходные данные (вариант генерации): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
В данном примере находится значение 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.11.2020, 17:19 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, И что же будет, если у вас последняя запись предыдущего месяца - первая суббота, а единственная следующего - последнее воскресенье? Вы для себя на бумажке логику распишите сначала, не надо ждать чуда от пока ещё добрых людей с форума. Оракл умеет реализовывать только ту логику, которая поддаётся алгоритмизации, не более того. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 17:27 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
env, Такого быть не может. Обязательно будет присутствовать рабочий день следующего за текущим месяца в fld2 которого надо будет подставить значение fld3, вычисленное по последней имеющейся дате предыдущего текущей дате (на момент расчета) месяца. Более того, он будет равен первому рабочему дню после выходных. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 17:34 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Опять прошу прощения за некорректную постановку, но наконец сам понял что именно надо: Исходные данные (вариант генерации): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
В данном примере находится значение 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 по текущей дате. Трудновато выделить всё в отдельный пример. Изменится структура данного запроса. для строки с '01.11.2020' какой роезультат распишите как получить (берем предыдущий месяц (10), ищем последнюю дату (31.10.2020), смотрим выходной ли -продолжте) авторЕсли текущая дата конца месяца рабочая, то значение lv подставляется в fld2 по текущей дате. я пока вообще не понял зы в примере id, fld2, fld3 сделайте уникальными, удобнее будет говорить о строках(рядках)) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 17:42 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Обязательно будет присутствовать рабочий день следующего за текущим месяца Ок. Пусть будет. Последний день следующего месяца. Пока не расписаны имеющиеся ограничения и нет алгоритма действий - так и будете переделывать раз за разом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 17:51 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Мы считаем на дату '31.10.2020' (последняя дата октября) - анализ следующий: - В '01.11.2020' (воскресенье) fld2 = 0. - В '02.11.2020' (первый рабочий день после '31.10.2020') fld2 = '09' (значение fld3 на дату '30.09.2020' (это последний день месяца, предшествующего '31.10.2020'), Если бы '01.11.2020' был бы рабочим днём, то для него также бралось бы значение fld3 на дату '30.09.2020', т.е. fld2 = '09' . ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 18:03 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Код: plsql 1. 2.
О, великолепно. А если там будут 27.09.2020 и 31.10.2020 и нет других дат, то что брать? упд. цитату взял как пример того, что разрыв в данных может быть от конца месяца, до конца месяца ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 18:08 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
env, Тогда расчёт не делается или 0 (даты для расчёта просто нет). Расчёт делается только в последний рабочий день месяца, либо на первый после выходных день следующего месяца. Если эта дата отсутствует - значит и расчёт ещё не сделан. Если вместо 29.09.2020 будет дата 27.09.2020 (любая максимальная дата сентября), то fld3 берётся по ней. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 18:11 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Stax, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Мы считаем на дату '31.10.2020' (последняя дата октября) - анализ следующий: - В '01.11.2020' (воскресенье) fld2 = 0. - В '02.11.2020' (первый рабочий день после '31.10.2020') fld2 = '09' (значение fld3 на дату '30.09.2020' (это последний день месяца, предшествующего '31.10.2020'), Если бы '01.11.2020' был бы рабочим днём, то для него также бралось бы значение fld3 на дату '30.09.2020', т.е. fld2 = '09' . откуда '30. 09 .2020' для строки с '01.11.2020' (выходной)? напишите все без если бы 01.11.2020, 31.10.2020 выходной ... в результате получим 222 01.11.2020 15 22 ?? ...... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 18:56 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 только в последний рабочий день месяца, либо на первый после выходных день следующего месяца О, ещё кусочек пазла. ARRay001, ну нет у остальных вашего контекста в голове. А хрустальные шары опять не работают. Полнее задачу ставьте, если хотите помощи. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 09:40 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
env ARRay001 только в последний рабочий день месяца, либо на первый после выходных день следующего месяца О, ещё кусочек пазла. непонятно в будущее надо гаглядывать, или нет? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 10:44 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax, нет - только те даты, что есть... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 11:04 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax, откуда '30.09.2020' для строки с '01.11.2020' (выходной)? - для строки с '01.11.2020' (выходной) расчёт делать не надо - там '0' напишите все без если бы - я написал вроде максимально точно, если что не ясно уточняйте что именно 01.11.2020, 31.10.2020 выходной ... в результате получим такие результаты: 666 '30.09.2020' (посл. раб день месяца) - , 10, '09' 777 '30.10.2020' (раб) - , '0' т.к. для этой даты можно не считать, т.к. это не конец месяца', '11' 888 '31.10.2020' (вых) - , '0', '11' 999 '01.11.2020' (вых) - , '0', '22' 112 '02.11.2020' (раб) - , '09' (=fld3 за '30.09.2020'),'22' Могу так всю таблицу расписать, хотя закономерность тут показана. Если так будет сложно, можно вместо '0' дублировать значение, вычисленное на предыдущий конец месяца. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 11:33 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 если что не ясно уточняйте что именно Может лучше вы напишете уже внятно, что вам надо? Без необходимости уточнять. Это не нам надо решить вашу задачу, это вам нужно решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 11:42 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
env, так я расписал всё подробно ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 11:47 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, Соберите описание в одно сообщение. Укажите внятно граничные случаи и обязательные данные. И заодно покажите, а что сами-то сделали, чтобы решить задачу со всеми "подробными уточнениями". ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 12:08 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 так я расписал всё подробно давайте я попробую чутку поменял (чтоб понятней было) Код: plsql 1. 2. 3. 4.
1) считаем показатель (lv) для каждой строки (over по другому не умеют) 2) пример 31.10.2020 01.11.2020 выходные wd=0 считаем для строки с 999, to_date('01.11.2020' 2.1 берем предыдущий месяц - 10 -й 2.2 ищем в предыдущем месяце последний день - 31/10 (не обязательно 31) 2.3 последний в передыдущем 31/10 выходной, не подходит 2.3.1 берем текуший для строки месяц - 10 2.3.2 ищем в текущем месяце первый рабочий - 02/11 (будущее относительно текущего 01.11.2020) 2.3.3 ответ для строки с ид=999 ,берем значение fld3 со строки с ид=112 - lv=220 что не так? ps если для выходного дня "не считать", а возвращать lv напр -1 то окно будет по текущую строку (дату) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 12:36 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax ARRay001 так я расписал всё подробно давайте я попробую чутку поменял (чтоб понятней было) Код: plsql 1. 2. 3. 4.
1) считаем показатель (lv) для каждой строки (over по другому не умеют) - если нельзя иначе, то да 2) пример 31.10.2020 01.11.2020 выходные wd=0 считаем для строки с 999, to_date('01.11.2020' 2.1 берем предыдущий месяц - 10 -й 2.2 ищем в предыдущем месяце последний день - 31/10 (не обязательно 31) 2.3 последний в передыдущем 31/10 выходной, не подходит 2.3.1 берем текуший для строки месяц - 10 2.3.2 ищем в текущем месяце первый рабочий - 02/11 (будущее относительно текущего 01.11.2020) 2.3.3 ответ для строки с ид=999 ,берем значение fld3 со строки с ид=112 - lv=220 что не так? - сама суть. Вот мой вариант: для строки с 999, to_date('01.11.2020' считать ничего не нужно - там 0) Идём по порядку дат: - 31.10.2020 - вых - не считаем - 01.11.2020 - вых - не считаем - 02.11.2020 - раб - считаем за октябрь по последней дате сентября (30.09.2020) вместо 31.10.2020. Как искать - будущее относительно текущего или смотреть какие дни были до текущей (если не рабочие конца месяца, то считаем через месяц назад) - это вопрос выбора при проектировании алгоритма. Я пока не понял как лучше делать. - соответственно, берём значение fld3 со строки где дата 30.09.2020 ps если для выходного дня "не считать", а возвращать lv напр -1 то окно будет по текущую строку (дату) это тоже вопрос проектирования алгоритма - главное, чтобы понятно было, что там нет значения или 0. ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 14:02 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 - 02.11.2020 - раб - считаем за октябрь по последней дате сентября (30.09.2020) вместо 31.10.2020. Как искать - будущее относительно текущего или смотреть какие дни были до текущей (если не рабочие конца месяца, то считаем через месяц назад ) автор если если текущая дата конца месяца (здесь '31.10.2020' суббота) является выходным днём, то вычисленное значение lv ставится в fld2, соответствующее первой имеющейся рабочей дате (здесь это '02.11.2020') следующего имеющегося в наличии месяца (ближайшая дата следующего месяца обязательно будет присутствовать). противоречие через месяц назад и ближайшая дата следующего месяца зы авторЯ пока не понял как лучше делать. как лучше пока(временно) не рассматриваем будет несколько вариантов решения, тогда и лучшее выберите терзают меня смутные сомнения, что мож тут over и не надо, зачем для целого месяца повторять значения из "последний" записи из пред. месяца ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 14:39 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax, "противоречие через месяц назад и ближайшая дата следующего месяца " - противоречий нет: "Через месяц назад" - это относится к значению какое брать, а "ближайшая дата следующего месяца" - это к месту, куда это значение выводить (первый рабочий день следующего месяца). "терзают меня смутные сомнения, что мож тут over и не надо," - Может и не over, "зачем для целого месяца повторять значения из "последний" записи из пред. месяца" - согласен - лучше писать значения только в последнюю дату месяца (если она рабочая), иначе в первый рабочий день следующего месяца. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 14:49 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Завести календарь уже предлагали? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 14:56 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 15:03 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
graycode, что значит завести календарь? Есть таблица, где перечислены все рабочие и не рабочие дни. О ней я писал выше и от неё можно отталкиваться... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 15:05 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, Отлично, теперь осталось четко описать алгоритм получения искомой даты не привязываясь к реализации, после чего можно приступать к реализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 15:26 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Stax, "противоречие через месяц назад и ближайшая дата следующего месяца " - противоречий нет: "Через месяц назад" - это относится к значению какое брать, а "ближайшая дата следующего месяца" - это к месту, куда это значение выводить (первый рабочий день следующего месяца). тоесть lv считать не для каждой строки, токо в первый рабочий день ARRay001 Stax, "терзают меня смутные сомнения, что мож тут over и не надо," - Может и не over, тема Использование оконных (аналитических) функций ARRay001 "зачем для целого месяца повторять значения из "последний" записи из пред. месяца" - согласен - лучше писать значения только в последнюю дату месяца (если она рабочая), иначе в первый рабочий день следующего месяца. вопрос не в лучше, а куда писать (вернее в какой строке), запутали Вы меня ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 15:28 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Постараюсь ещё раз описать алгоритм без привязки к реализации: Смотрим каждую последнюю дату месяца: 1) если это не выходной день (смотрим по таблице дат) -> ищем значение fld3 на последнюю дату предыдущего месяца и выводим в текущее fld2 2) если это выходной день (смотрим по таблице дат) -> -- ищем значение fld3 на последнюю дату предыдущего месяца -- ищем первый рабочий день следующего месяца и выводим в fld2 этого дня найденное значение fld3 всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 16:45 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, про fld2 я не понял вот что я нафантазировал Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.
ps мож надо некоторые with материализовать ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 17:08 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Постараюсь ещё раз описать алгоритм без привязки к реализации: Смотрим каждую последнюю дату месяца: 1) если это не выходной день (смотрим по таблице дат) -> ищем значение fld3 на последнюю дату предыдущего месяца и выводим в текущее fld2 2) если это выходной день (смотрим по таблице дат) -> -- ищем значение fld3 на последнюю дату предыдущего месяца -- ищем первый рабочий день следующего месяца и выводим в fld2 этого дня найденное значение fld3 всё. Очень странное описание, почему в fld2, оно другого типа и с другим диапазоном значений, если 29, 30, 31 и 01 следующего месяца - нерабочие дни, то дата я так полагаю должна попасть в 02, т.е. предположение о последней дате месяца мягко говоря не выдерживает критики. Итак, попробую описать как выглядит ваша задача на самом деле. Есть некое поле fld3, есть периоды (месяцы), требуется для всех строк попадающих в определенный период вывести поле fld3_prev, со значением из строки с самой последней датой предыдущего периода (месяца), при этом даты которые есть не годятся для расчетов, т.е. эффективные даты нужно предварительно получить следующим образом - эффективная дата равна первому рабочему дню больше или равному исходной дате. Верное описание? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 19:00 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
graycode ARRay001 Постараюсь ещё раз описать алгоритм без привязки к реализации: Смотрим каждую последнюю дату месяца: 1) если это не выходной день (смотрим по таблице дат) -> ищем значение fld3 на последнюю дату предыдущего месяца и выводим в текущее fld2 2) если это выходной день (смотрим по таблице дат) -> -- ищем значение fld3 на последнюю дату предыдущего месяца -- ищем первый рабочий день следующего месяца и выводим в fld2 этого дня найденное значение fld3 всё. Очень странное описание, почему в fld2, оно другого типа и с другим диапазоном значений, если 29, 30, 31 и 01 следующего месяца - нерабочие дни, то дата я так полагаю должна попасть в 02, т.е. предположение о последней дате месяца мягко говоря не выдерживает критики. Итак, попробую описать как выглядит ваша задача на самом деле. Есть некое поле fld3, есть периоды (месяцы), требуется для всех строк попадающих в определенный период вывести поле fld3_prev, со значением из строки с самой последней датой предыдущего периода (месяца), при этом даты которые есть не годятся для расчетов, т.е. эффективные даты нужно предварительно получить следующим образом - эффективная дата равна первому рабочему дню больше или равному исходной дате. Верное описание? А чем моё описание не так? Поля все, кроме даты имеют строковый тип в итоге. Мне важна суть решения. С предыдущим решением ещё не разобрался, но похоже на истину. Вот переделанная ваша трактовка: Есть все поля: дата, fld3 и fld2 (у меня их намного больше и с unpivot). Требуется для всех строк, соответствующих последнему дню месяца (если они есть) и являющихся рабочими днями вывести поле fld3_prev, со значением из строки с самой последней датой предыдущего периода (месяца) в текущее поле fld2, при этом, если последний день месяца является нерабочим днем и не годится для подстановки (, т.е. эффективные даты для подстановки нужно предварительно получить следующим образом - эффективная дата равна первому рабочему дню больше или равному исходной дате), то fld3_prev выводится в полученную эффективную дату в поле fld2. Можно это с другой стороны перевернуть - это как лучше для алгоритма расчета. Но суть такая. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 21:18 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, Что вы пытаетесь сделать мне не понятно, может быть Stax догадается, я пас. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 21:34 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
graycode, правда не понимаю, как ещё расписать условие. Надо ставить в текущее поле fld2 значения fld3 с последней даты предыдущего месяца, если текущая дата рабочая. Если текущее не рабочая дата, то ставим то же самое fld3 не в текущее fld2, а в fld2 ниже - на первую рабочую дату следующего месяца. Причем отбирать в качестве текущих только даты окончания месяцев в качестве точки отсчета (значения fld2 в остальные даты месяца = 0). Также fld2=0 будет у дат окончания месяца, которые выходные. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 23:51 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax ARRay001, про fld2 я не понял вот что я нафантазировал Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.
ps мож надо некоторые with материализовать ..... stax Логика почти верна, с той разницей, что не надо включать логику "нерабочие/рабочие дни" при поиске fld3 выше. Эта логика включается при выборе, напротив какой даты ставить найденное значение fld3. Выбивается последнее значение. Ну и писаться должно не в отдельный LV, а в fld2, но это уже фигня - это я сам додумаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 00:20 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Немного ошибся: Как должно быть: ID DATE1 FLD2 FLD3 WD LV ---------- ---------- ---------- -- ---------- -- 1 10.01.2020 10 11 1 2 11.01.2020 15 22 1 3 12.01.2020 30 43 1 4 01.07.2020 10 17 0 5 21.07.2020 15 27 1 6 30.07.2020 30 07 1 43 7 13.08.2020 10 14 0 8 17.08.2020 15 24 1 9 29.08.2020 30 02 1 07 10 03.09.2020 10 14 1 11 27.09.2020 15 24 1 12 29.09.2020 30 04 0 10 07.10.2020 10 12 1 02 11 27.10.2020 15 22 1 12 31.10.2020 30 42 0 10 01.11.2020 10 15 0 11 02.11.2020 15 25 1 04 12 20.11.2020 30 05 1 42 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 01:09 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Немного ошибся: Как должно быть: понял чутку освобожусь, сделаю без "Ну и писаться должно не в отдельный LV, а в fld2, но это уже фигня - это я сам додумаю" пока не оптимально (не знаю как луче over или select max(l.fld3) KEEP ...) постараюсь к обеду ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 09:47 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
а что, на этом форуме больше не посылают в ветку "помощь студентам" и т.д? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 12:09 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83.
select max(l.fld3) KEEP можно заменить на аналитику last_value w жалко было выбрасывать или реализовать через джоины вариантов много напр посчитать и для выходного перенести на первое первые/последнии дни искать по другому и тд так-как выборка не должна быть громадной макс 367*к-во лет ничего не оптимизировал, делал влоб для старых версий ps допускаю что что-то не допонял или понял но неправильно реализовал ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 12:25 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
merch а что, на этом форуме больше не посылают в ветку "помощь студентам" и т.д? к сожленью я уже не студент, хотя я только учусь ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 12:27 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax, супер, спасибо! Осталось мне только полностью осознать решение для того, чтобы перенести и поддерживать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 12:39 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, повторюсь делал влоб вариантов много, наверняка можно улучшить ...... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 12:42 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax, В общем, опять забраковали постановку (сам не рад). Теперь получается последний вариант надо совместить с предыдущим. Т.е. мы учитываем выхи ещё и когда смотрим, откуда брать fld3. Иначе говоря, если предыдущая дата была выходным и был сдвиг на рабочий, то при расчёте следующего берём fld3 из этой рабочей даты предыдущего сдвига (теперь она как бы конец предыдущего месяца). Т.е. правильный вариант теперь такой: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 17:26 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Stax, В общем, опять забраковали постановку (сам не рад). запутали Вы меня (конец дня туго соображаю) если инфа напр за 10лет, то ето макс 4000 записей (не много) забить на аналитику и считать ф-цией все 4000-а в масив, а дальше хоть выходной, хоть празничный результат возращать пайпом или колекцией зі я и в предыдущей постановке не все понял напр за месяц токо одна строка с рабочим днем, а предыдущий месяц заканчивается выходным ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 18:08 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax ARRay001 Stax, В общем, опять забраковали постановку (сам не рад). запутали Вы меня (конец дня туго соображаю) если инфа напр за 10лет, то ето макс 4000 записей (не много) забить на аналитику и считать ф-цией все 4000-а в масив, а дальше хоть выходной, хоть празничный результат возращать пайпом или колекцией зі я и в предыдущей постановке не все понял напр за месяц токо одна строка с рабочим днем, а предыдущий месяц заканчивается выходным ..... stax Почему же? Решение-то было верное по той постановке! Уже много написано аналитики для перехода на функцию. Если за месяц только одна строка с рабочим днём, а предыдущий месяц заканчивается выходным, то в этот рабочий день пишется только fld3 за позапрошлый месяц (т.е. расчёт на последний день предыдущего месяца). В тот месяц, в котором только один рабочий день - этот день никогда не будет концом месяца. Всегда при достижении даты конца месяца, будет присутствовать первый рабочий день месяца после выходных. А итог за предыдущий месяц считается только при наступлении даты конца месяца, не раньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 18:25 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001, А где ваши попытки реализовать описанную вами же логику на основе внимательного изучения предложенных вариантов решения? Или вы решили сесть Стасу на шею в надежде чужими руками сделать свою работу? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 09:08 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
env, а зачем ? его задача авторУже много написано аналитики для перехода на функцию ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 09:50 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
env, уровень моих знаний аналитики ещё не так высок - всё даётся с трудом ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 13:22 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
Stax, можно не решать последний вариант. Я нашел другое решение вопроса. Там в таблице хранилось готовое значение с минимумом аналитики. Подставил в последний вариант и всё вроде срослось. Если только для собственного интереса) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 17:27 |
|
Использование оконных (аналитических) функций
|
|||
---|---|---|---|
#18+
ARRay001 Stax, можно не решать последний вариант. Я нашел другое решение вопроса. Там в таблице хранилось готовое значение с минимумом аналитики. Подставил в последний вариант и всё вроде срослось. Если только для собственного интереса) я еще не совсем созрел для решения новой постановки (не осознал что надо) да и предыдущее решение, достаточно громоздкое и мож там не все нюансы учтены напр select max(l.fld3) KEEP from l так как признак выходного уже не используется то искать луче в T1 (исходной выборке) делал на коленке, мож еще что-то напутал (не понял) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 17:54 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1880632]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
100ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 210ms |
0 / 0 |