Выборка по периодическому регистру сведений

1. MKFreeUser 71 09.08.23 13:22 Сейчас в теме
Добрый день, на входе есть регистр сведений примерно такого вида:
01.01.2023 - Ставка 2%
01.03.2023 - Ставка 3%
01.04.2023 - Ставка 5%
15.05.2023 - Ставка 2%
01.07.2023 - Ставка 2%
01.10.2023 - Ставка 5%

Необходимо получить периоды действий по значению "Ставка 2%" т.е.

с 01.01.2023 по 28.02.2023
с 15.05.2023 по 30.09.2023
либо так
с 01.01.2023 по 28.02.2023
с 15.05.2023 по 30.06.2023
с 01.07.2023 по 30.09.2023

Главное получить только периоды действия.
Ничего не приходит на ум, кроме как получить все записи и в цикле перебрать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
3. RustamZz 09.08.23 13:41 Сейчас в теме +1 $m
(1)
ВЫБРАТЬ
	НачТаблица.ДатаСтавки КАК Начало,
	МИНИМУМ(ДОБАВИТЬКДАТЕ(НачТаблица1.ДатаСтавки, СЕКУНДА, -1)) КАК Окончание,
	НачТаблица.Ставка
ИЗ
	НачТаблица КАК НачТаблица
		ЛЕВОЕ СОЕДИНЕНИЕ НачТаблица КАК НачТаблица1
		ПО НачТаблица.ДатаСтавки < НачТаблица1.ДатаСтавки

СГРУППИРОВАТЬ ПО
	НачТаблица.Ставка,
	НачТаблица.ДатаСтавки
Показать
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. RustamZz 09.08.23 13:41 Сейчас в теме +1 $m
(1)
ВЫБРАТЬ
	НачТаблица.ДатаСтавки КАК Начало,
	МИНИМУМ(ДОБАВИТЬКДАТЕ(НачТаблица1.ДатаСтавки, СЕКУНДА, -1)) КАК Окончание,
	НачТаблица.Ставка
ИЗ
	НачТаблица КАК НачТаблица
		ЛЕВОЕ СОЕДИНЕНИЕ НачТаблица КАК НачТаблица1
		ПО НачТаблица.ДатаСтавки < НачТаблица1.ДатаСтавки

СГРУППИРОВАТЬ ПО
	НачТаблица.Ставка,
	НачТаблица.ДатаСтавки
Показать
Прикрепленные файлы:
4. starik-2005 3046 09.08.23 13:48 Сейчас в теме
(3) В соединении ставка отсутствует. Если будут пересекающиеся ставки?
5. RustamZz 09.08.23 13:51 Сейчас в теме
(4) Результат на картинке. Что такое пересекающиеся ставки?
7. Vitaly1C8 09.08.23 15:16 Сейчас в теме
(5) ПО НачТаблица.ДатаСтавки < НачТаблица1.ДатаСтавки
И НачТаблица.Ставка = НачТаблица1.Ставка а так случайно не более правильно ?! из условия не следует что только одна ставка действует ...
8. Sashares 35 09.08.23 16:52 Сейчас в теме
(7)Скорее И НачТаблица.Ставка <> НачТаблица1.Ставка чтобы объединить строки по одной и той же ставке, которые следуют подряд.
6. user1826630 09.08.23 13:58 Сейчас в теме
(4) Пересекаться могут только если в регистре есть дата окончания. Если в регистре только дата начала - то ничего пересекаться не может (при условии периодичности ДЕНЬ)
starik-2005; +1 Ответить
2. starik-2005 3046 09.08.23 13:35 Сейчас в теме
Выбрать t1.Период, ДОБАВИТЬКДАТЕ(t2.Период, ДЕНЬ, -1)
ИЗ Регистр КАК t1
ЛЕВОЕ СОЕДИНЕНИЕ Регистр КАК t2
ПО t2.Период В (Выбрать МИНИМУМ(Период) ИЗ РегистрСведений ГДЕ Период > t1.период) 
9. booksfill 09.08.23 17:25 Сейчас в теме
За подобным рекомендовал бы обратиться к решению ildarovich Сергея.
https://infostart.ru/1c/tools/402534/


P.S.
Ни обычное соединение по неравенству, ни тем паче коррелированный запрос (он, вероятно, будет еще медленнее) в общем случае не желательны по причинам производительности.
Разве что бизнес логика гарантирует небольшое кол-во строк в исходной таблице интервалов.

Я бы порекомендовал хранить сразу начало и конец интервала.
Программирование минимальное, а выигрыш во времени исполнения запроса огромный.
Разумеется, за все надо платить.
В данном случае у вас при каждой вставке /изменении строки будет отрабатывать код, ответственный за исключение пересечения интервалов и без блокировок тоже не обойтись.
Так что, если вставляете сразу сотни тысяч записей, то ... задумайтесь об архитектуре решения, а границы все равно храните :)

Из этой же оперы ответ на извечный вопрос "как мне получить курс валюты на каждую дату документа", IMHO, звучит как: "храните его на каждую дату, благо реализуется несложно".
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот