powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оконные и аналитические функции. Практическое применение
13 сообщений из 38, страница 2 из 2
Оконные и аналитические функции. Практическое применение
    #40137269
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще, всё что связанно с долями отлично считается через аналитику.
Ещё пример, расчёт налога на имущество. Имеется у вас несколько десятков тысяч объектов основных средств, причисленных каждый к своему подразделению. Вы рассчитываете, по определённым формулам, сумму налога на имущество. Но потом эту сумму надо распределить по подразделениям. В бухгалтерских документах суммы до копеек, так что придётся округлять каждую сумму по подразделению. А после этого накопившуюся разницу от округлений закинуть в подразделение с самой большой суммой или распределить среди топ 5 подразделений.
Так вот аналитикой это делается одним запросом.
...
Рейтинг: 0 / 0
Оконные и аналитические функции. Практическое применение
    #40137272
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
istrebitel
Вообще, всё что связанно с долями отлично считается через аналитику.
Ещё пример, расчёт налога на имущество. Имеется у вас несколько десятков тысяч объектов основных средств, причисленных каждый к своему подразделению. Вы рассчитываете, по определённым формулам, сумму налога на имущество. Но потом эту сумму надо распределить по подразделениям. В бухгалтерских документах суммы до копеек, так что придётся округлять каждую сумму по подразделению. А после этого накопившуюся разницу от округлений закинуть в подразделение с самой большой суммой или распределить среди топ 5 подразделений.
Так вот аналитикой это делается одним запросом.
Хм... я в таких случаях использую оператор WITH...
И получаю конечный результат в той форме, какой нужен пользователю.
...
Рейтинг: 0 / 0
Оконные и аналитические функции. Практическое применение
    #40137273
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 Закрыт
...
Рейтинг: 0 / 0
Оконные и аналитические функции. Практическое применение
    #40137282
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СА,

Ну в моём случае конечный результат был
Код: sql
1.
2.
insert into DocSpec
select ...


То есть надо сформировать документ в системе.
Реальная жизнь ещё сложнее, налог считается от остаточной стоимости ОС, кто знаком с бух учётом знает, остальным поясню. Остаточная стоимость это первоначальная стоимость - амортизация. Они хранятся на разных счетах бухучёта. А если это здоровенное здание там могут быть несколько подразделений, часть здания может сдаваться в аренду. В течении года у объекта ОС могла быть модернизация меняющая его первоначальную стоимость. Представьте любой здоровенный завод, вот вам надо посчитать всё от шуруповёрта до здания, в разрезе каждого месяца за год. С учётом кучи условий движимое/недвижимое, введено в эксплуатацию до такой то даты или после.
...
Рейтинг: 0 / 0
Оконные и аналитические функции. Практическое применение
    #40137295
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
istrebitel
Владимир СА,

Ну в моём случае конечный результат был
Код: sql
1.
2.
insert into DocSpec
select ...


То есть надо сформировать документ в системе.
Реальная жизнь ещё сложнее, налог считается от остаточной стоимости ОС, кто знаком с бух учётом знает, остальным поясню. Остаточная стоимость это первоначальная стоимость - амортизация. Они хранятся на разных счетах бухучёта. А если это здоровенное здание там могут быть несколько подразделений, часть здания может сдаваться в аренду. В течении года у объекта ОС могла быть модернизация меняющая его первоначальную стоимость. Представьте любой здоровенный завод, вот вам надо посчитать всё от шуруповёрта до здания, в разрезе каждого месяца за год. С учётом кучи условий движимое/недвижимое, введено в эксплуатацию до такой то даты или после.
Т.е. и ты не знаешь использование оператора WITH...
...
Рейтинг: 0 / 0
Оконные и аналитические функции. Практическое применение
    #40137299
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
istrebitel
Владимир СА,

Ну в моём случае конечный результат был
Код: sql
1.
2.
insert into DocSpec
select ...


То есть надо сформировать документ в системе.
Реальная жизнь ещё сложнее, налог считается от остаточной стоимости ОС, кто знаком с бух учётом знает, остальным поясню. Остаточная стоимость это первоначальная стоимость - амортизация. Они хранятся на разных счетах бухучёта. А если это здоровенное здание там могут быть несколько подразделений, часть здания может сдаваться в аренду. В течении года у объекта ОС могла быть модернизация меняющая его первоначальную стоимость. Представьте любой здоровенный завод, вот вам надо посчитать всё от шуруповёрта до здания, в разрезе каждого месяца за год. С учётом кучи условий движимое/недвижимое, введено в эксплуатацию до такой то даты или после.
Оператор WITH очень обобщенный...
Но если просто записать в таблицу:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> create table tab (x number, y number);
Table created.

SQL> insert into tab(x, y)
  2  with v as (
  3     select 1 a, 2 b from dual union all
  4     select 3 a, 4 b from dual
  5  )
  6  select a, b
  7  from v
  8  /
2 rows created.

К чему я... Т.е. если в WITH куча алиасов, то все равно можно сделать запись в таблицу...
...
Рейтинг: 0 / 0
Оконные и аналитические функции. Практическое применение
    #40137323
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СА,

Оператор WITH не спасёт тебя от двойного, тройного, пятерного прохождения по одним и тем же данным, а данных много. Да MATERIALIZE чуть облегчит задачу.
...
Рейтинг: 0 / 0
Оконные и аналитические функции. Практическое применение
    #40137327
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
istrebitel
Владимир СА,

Оператор WITH не спасёт тебя от двойного, тройного, пятерного прохождения по одним и тем же данным, а данных много. Да MATERIALIZE чуть облегчит задачу.
Хм... Значит ПЛОХО составлены запросы.
...
Рейтинг: 0 / 0
Оконные и аналитические функции. Практическое применение
    #40137332
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 минуты. Сравнительно легко добавлять логику исключения времени нахождения в статусе Приостановлен.
...
Рейтинг: 0 / 0
Оконные и аналитические функции. Практическое применение
    #40137572
IgorShr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот пока у меня складывается впечатление что тема в первую очередь для разовых запросов или блажи или привычки заказчиков, не?
То есть они больше для визуализации. Для движков , которые работают на логику есть смысл их использовать?
ну вот взять те же лимиты которые накапливающимся итогом. В знакомых мне по работе платежных системах лимиты считаются без использования аналитических или оконных функций, да и пороговые и прочие комиссии тоже . А вот какому нибудь плановику тому подай нарастающий итог в разных проекциях.

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 . В нем эта логика будет зашита и будет выбрасываться алерт,
смысл в отчете, который запускается ежесекундно и отслеживает показатель нулевой.
Так?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Оконные и аналитические функции. Практическое применение
    #40138192
bhr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorShr [игнорируется] 

Мне сейчас трудно представить, что бы я делал без оконных функций. Если говорить корректно, может быть я без них обошелся бы, но уже не помню, как. Ибо настолько к ним привык.
Простой пример. Есть таблица с колонкой date_begin (date_end - нету). Не важно, что это - курс доллара, допустим. В другой таблице есть всякие разные покупки в валюте. Нужно добавить колонку - сумма в рублях. то есть для каждой строчки найти строчку с правильным курсом доллара.
Еще пример из жизни - нужно выдать зарплату N сотрудникам из M мешков с деньгами (реальная задача) две таблицы - итог связь двух таблиц, номер сотрудника, номер мешка, сумма. Попробуйте решить.
Да и просто найти дубли в таблице по определенному набору полей. Наверняка решите без оконных функций. А я уже без оконных функций не знаю, как решать.
Еще для затравки вам, чтоб интерес к задаче появился. Есть колода карт (таблица). Надо перетасовать колоду и выдать на экран из первые десять карт. одним селектом ессно, без циклов.
...
Рейтинг: 0 / 0
Оконные и аналитические функции. Практическое применение
    #40138194
bhr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и стандартный пример, который используется в 90% случаев.
Большой селект, обращающийся к разным таблицам. В таблицах есть дубли по определенным полям. Нужно, чтоб их не было. например, джойн по полю id и могут быть несколько строк с одинаковым id, что однозначно породит дубли в итоговом запросе.
чтоб убрать дубли, заказчик требует выбрать только те строки, у которых максимальный date_begin (ну или какое другое поле поле - максимально-минимально)
попробуйте решить такую задачку без оконных функций.
С помощью оконной функции
row_number() over (partition by id order by date_begin desc)
задача решается с полпинка.
Интересно ваше решение без оконных функций.
оконные функции - инструмент. Заказчиков оконных функций нет. Есть проблема, которую надо решить. и вот тут инструмент вполне так может понадобится. В примере выше - вы видите требование заказчика. Там ни слова про оконные функции. Это ваш талант и умения должны вам подсказать, что их использование тут как нельзя кстати.
...
Изменено: 31.10.2023, 12:10 - bhr
Рейтинг: 0 / 0
Оконные и аналитические функции. Практическое применение
    #40138245
Shtirlitz33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простой пример.
есть набор сумм договоров с плюсами и минусами. Например по клиенту что-то типа

договор 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

По мне так проще потом читать и поддерживать зарос влезающий на одну страничку чем пихать все это например по коллекциям да потом по ним бегать пока не надоест или кучу раз читать одни и те же данные подбирая суммы.
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оконные и аналитические функции. Практическое применение
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (6): Анонимы (4), Bing Bot, Yandex Bot 5 мин.
Пользователи онлайн (7): Анонимы (5), Bing Bot, Yandex Bot 3 мин.
x
x
Закрыть


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