|
Оконные и аналитические функции. Практическое применение
|
|||
---|---|---|---|
#18+
Вообще, всё что связанно с долями отлично считается через аналитику. Ещё пример, расчёт налога на имущество. Имеется у вас несколько десятков тысяч объектов основных средств, причисленных каждый к своему подразделению. Вы рассчитываете, по определённым формулам, сумму налога на имущество. Но потом эту сумму надо распределить по подразделениям. В бухгалтерских документах суммы до копеек, так что придётся округлять каждую сумму по подразделению. А после этого накопившуюся разницу от округлений закинуть в подразделение с самой большой суммой или распределить среди топ 5 подразделений. Так вот аналитикой это делается одним запросом. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 11:11 |
|
Оконные и аналитические функции. Практическое применение
|
|||
---|---|---|---|
#18+
istrebitel Вообще, всё что связанно с долями отлично считается через аналитику. Ещё пример, расчёт налога на имущество. Имеется у вас несколько десятков тысяч объектов основных средств, причисленных каждый к своему подразделению. Вы рассчитываете, по определённым формулам, сумму налога на имущество. Но потом эту сумму надо распределить по подразделениям. В бухгалтерских документах суммы до копеек, так что придётся округлять каждую сумму по подразделению. А после этого накопившуюся разницу от округлений закинуть в подразделение с самой большой суммой или распределить среди топ 5 подразделений. Так вот аналитикой это делается одним запросом. И получаю конечный результат в той форме, какой нужен пользователю. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 11:14 |
|
Оконные и аналитические функции. Практическое применение
|
|||
---|---|---|---|
#18+
lead / lag Есть у тебя заявка и история статусов по ней. Дата время Статус03.03.2022 11:15:00 Новая03.03.2022 11:16:00 Принят03.03.2022 11:18:00 В работе03.03.2022 11:19:00 Выполнен03.03.2022 11:24:00 Закрыт А надо получить Дата время Статус Продолжительность03.03.2022 11:15:00 Новая 00:01:0003.03.2022 11:16:00 Принят 00:02:0003.03.2022 11:18:00 В работе 00:01:0003.03.2022 11:19:00 Выполнен 00:05:0003.03.2022 11:24:00 Закрыт ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 11:19 |
|
Оконные и аналитические функции. Практическое применение
|
|||
---|---|---|---|
#18+
Владимир СА, Ну в моём случае конечный результат был Код: sql 1. 2.
То есть надо сформировать документ в системе. Реальная жизнь ещё сложнее, налог считается от остаточной стоимости ОС, кто знаком с бух учётом знает, остальным поясню. Остаточная стоимость это первоначальная стоимость - амортизация. Они хранятся на разных счетах бухучёта. А если это здоровенное здание там могут быть несколько подразделений, часть здания может сдаваться в аренду. В течении года у объекта ОС могла быть модернизация меняющая его первоначальную стоимость. Представьте любой здоровенный завод, вот вам надо посчитать всё от шуруповёрта до здания, в разрезе каждого месяца за год. С учётом кучи условий движимое/недвижимое, введено в эксплуатацию до такой то даты или после. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 11:41 |
|
Оконные и аналитические функции. Практическое применение
|
|||
---|---|---|---|
#18+
istrebitel Владимир СА, Ну в моём случае конечный результат был Код: sql 1. 2.
То есть надо сформировать документ в системе. Реальная жизнь ещё сложнее, налог считается от остаточной стоимости ОС, кто знаком с бух учётом знает, остальным поясню. Остаточная стоимость это первоначальная стоимость - амортизация. Они хранятся на разных счетах бухучёта. А если это здоровенное здание там могут быть несколько подразделений, часть здания может сдаваться в аренду. В течении года у объекта ОС могла быть модернизация меняющая его первоначальную стоимость. Представьте любой здоровенный завод, вот вам надо посчитать всё от шуруповёрта до здания, в разрезе каждого месяца за год. С учётом кучи условий движимое/недвижимое, введено в эксплуатацию до такой то даты или после. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 12:11 |
|
Оконные и аналитические функции. Практическое применение
|
|||
---|---|---|---|
#18+
istrebitel Владимир СА, Ну в моём случае конечный результат был Код: sql 1. 2.
То есть надо сформировать документ в системе. Реальная жизнь ещё сложнее, налог считается от остаточной стоимости ОС, кто знаком с бух учётом знает, остальным поясню. Остаточная стоимость это первоначальная стоимость - амортизация. Они хранятся на разных счетах бухучёта. А если это здоровенное здание там могут быть несколько подразделений, часть здания может сдаваться в аренду. В течении года у объекта ОС могла быть модернизация меняющая его первоначальную стоимость. Представьте любой здоровенный завод, вот вам надо посчитать всё от шуруповёрта до здания, в разрезе каждого месяца за год. С учётом кучи условий движимое/недвижимое, введено в эксплуатацию до такой то даты или после. Но если просто записать в таблицу: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
К чему я... Т.е. если в WITH куча алиасов, то все равно можно сделать запись в таблицу... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 12:32 |
|
Оконные и аналитические функции. Практическое применение
|
|||
---|---|---|---|
#18+
Владимир СА, Оператор WITH не спасёт тебя от двойного, тройного, пятерного прохождения по одним и тем же данным, а данных много. Да MATERIALIZE чуть облегчит задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 13:10 |
|
Оконные и аналитические функции. Практическое применение
|
|||
---|---|---|---|
#18+
istrebitel Владимир СА, Оператор WITH не спасёт тебя от двойного, тройного, пятерного прохождения по одним и тем же данным, а данных много. Да MATERIALIZE чуть облегчит задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 13:18 |
|
Оконные и аналитические функции. Практическое применение
|
|||
---|---|---|---|
#18+
Вот где используется нарастающий итог Дата время Статус Продолжительность Общее время03.03.2022 11:15:00 Новая 00:01:0003.03.2022 11:16:00 Принят 00:02:00 00:01:0003.03.2022 11:18:00 В работе 00:01:00 00:03:0003.03.2022 11:19:00 Выполнен 00:05:00 00:04:0003.03.2022 11:24:00 Закрыт 00:09:00 От подачи заявки до выполнения прошло 4 минуты. Сравнительно легко добавлять логику исключения времени нахождения в статусе Приостановлен. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 13:28 |
|
Оконные и аналитические функции. Практическое применение
|
|||
---|---|---|---|
#18+
Вот пока у меня складывается впечатление что тема в первую очередь для разовых запросов или блажи или привычки заказчиков, не? То есть они больше для визуализации. Для движков , которые работают на логику есть смысл их использовать? ну вот взять те же лимиты которые накапливающимся итогом. В знакомых мне по работе платежных системах лимиты считаются без использования аналитических или оконных функций, да и пороговые и прочие комиссии тоже . А вот какому нибудь плановику тому подай нарастающий итог в разных проекциях. istrebitel Вот где используется нарастающий итог Дата время Статус Продолжительность Общее время03.03.2022 11:15:00 Новая 00:01:0003.03.2022 11:16:00 Принят 00:02:00 00:01:0003.03.2022 11:18:00 В работе 00:01:00 00:03:0003.03.2022 11:19:00 Выполнен 00:05:00 00:04:0003.03.2022 11:24:00 Закрыт 00:09:00 От подачи заявки до выполнения прошло 4 минуты. Сравнительно легко добавлять логику исключения времени нахождения в статусе Приостановлен. Вот как раз и напрашивается вопрос, допустим это какой нибудь сервис менеджер, который отслеживает SLA . В нем эта логика будет зашита и будет выбрасываться алерт, смысл в отчете, который запускается ежесекундно и отслеживает показатель нулевой. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 15:39 |
|
Оконные и аналитические функции. Практическое применение
|
|||
---|---|---|---|
#18+
ну и стандартный пример, который используется в 90% случаев. Большой селект, обращающийся к разным таблицам. В таблицах есть дубли по определенным полям. Нужно, чтоб их не было. например, джойн по полю id и могут быть несколько строк с одинаковым id, что однозначно породит дубли в итоговом запросе. чтоб убрать дубли, заказчик требует выбрать только те строки, у которых максимальный date_begin (ну или какое другое поле поле - максимально-минимально) попробуйте решить такую задачку без оконных функций. С помощью оконной функции row_number() over (partition by id order by date_begin desc) задача решается с полпинка. Интересно ваше решение без оконных функций. оконные функции - инструмент. Заказчиков оконных функций нет. Есть проблема, которую надо решить. и вот тут инструмент вполне так может понадобится. В примере выше - вы видите требование заказчика. Там ни слова про оконные функции. Это ваш талант и умения должны вам подсказать, что их использование тут как нельзя кстати. ... |
|||
:
Изменено: 31.10.2023, 12:10 - bhr
Нравится:
Не нравится:
|
|||
31.10.2023, 12:08 |
|
Оконные и аналитические функции. Практическое применение
|
|||
---|---|---|---|
#18+
Простой пример. есть набор сумм договоров с плюсами и минусами. Например по клиенту что-то типа договор 1 +1000 дата 01.01.2023 договор 2 -500 дата 03.01.2023 договор 3 -200 дата 01.05.2023 И общий список скажем в сумм 1000 по десятку разных клиентов. И во всем этим клиентом надо сделать свертку этих сумм например по дате начиная с минимальной отбрасывая лишние суммы по одной из сторон и оставляя остаток на погранично сумме(т.е. в примере выше от тысячи останется 300 рублей). Аналитикой ве это можно сделать в одном запросе получив на выходе готовый список где будет что-то типа клиент 1 всего позиций 3 эта позиция 1 договор 1 сумма +1000 закрываем 700 клиент 1 всего позиций 3 эта позиция 2 договор 1 сумма -500 закрываем -500 клиент 1 всего позиций 3 эта позиция 3 договор 1 сумма -200 закрываем -200 По мне так проще потом читать и поддерживать зарос влезающий на одну страничку чем пихать все это например по коллекциям да потом по ним бегать пока не надоест или кучу раз читать одни и те же данные подбирая суммы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2023, 11:50 |
|
|
start [/forum/topic.php?fid=52&msg=40137273&tid=1879471]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 159ms |
0 / 0 |