Каталог решений - Последний раз про срез последних (на каждую дату в запросе)

Последний раз про срез последних (на каждую дату в запросе)

Последний раз про срез последних (на каждую дату в запросе)

В наличии

Срез последних на каждую дату в запросе. Известные факты о задаче:

часто встречается на испытаниях соискателей на работу программистом 1с,
постоянно провоцирует споры об оптимальном решении.
В данном тексте приводятся замеры производительности различных вариантов решения задачи.

Категория:

Описание

На проведение данного исследования меня натолкнула статья «Срез на даты за период. Шаблон запроса» с комментариями. Суть статьи: автор привел два варианта решения известной задачи — традиционный и свой собственный («интервальный»). В комментариях оба варианта подверглись резкой критике за сложность — большой объем текста, временные таблицы. Цитирую критиков:

«давно уже подобную задачу решают одним запросом (без всяких временных таблиц) с двумя левыми соединениями»

«Не вникал в смысл задачи, но срез на дату чего-либо по периоду делается простым 1 запросом без всяких ВТ.»

Комментаторы оказались людьми слова и дела, предложили два своих варианта, без временных таблиц, в один запрос.

Изначально, я был сторонником традиционного способа — он давно известен, интуитивно понятен (но это не точно) и более-менее оптимальный по производительности (это тоже не точно). Вариант автора — тоже интересный, мне такая идея в голову не приходила, но, почему-то, он мне показался менее производительным.

Оба варианта из комментариев — короткие, лаконичные, но затратные по ресурсам, на мой взгляд.

Но вообще, интересно провести исследование, и цифрами показать, какой из вариантов лучше и на сколько.

Почти год я собирался с мыслями. Потом провел эксперимент. Еще почти год созревал изложить это в виде статьи. Наконец, созрел 🙂

По ходу изучения темы, мне попался еще один вариант в статье «Минимализмы» п.4. Тоже в один запрос, довольно диковинное решение, вряд ли применимое на практике, но интересное.

Итого получилось 5 вариантов.

На мой взгляд, все такие задачи в реальности примерно одного типа. Возьмем самую типичную:

  • организация продает товары (документ Реализация товаров);
  • их цена хранится в регистре (периодический регистр сведений Цены) и меняется во времени;
  • продавец может устанавливать скидку в момент продажи, но не более некоторого процентного значения;
  • в какой-то момент времени нужно проверить, что все скидки действительно не превышали этого порога;
  • если превышали, то где, когда, на сколько;
  • значения скидок в документах не хранятся (или хранятся, но мы им не доверяем), а считаем отношение цены из документа продажи к значению цены их регистра на дату.
 

has been added to your cart:
Оформление заказа