Есть таблица

Дата | Значение параметра
01.01.23 | 1
02.01.23 | 1
03.01.23 | 1
04.01.23 | 1
05.01.23 | 2
06.01.23 | 2
07.01.23 | 2
08.01.23 | 1
09.01.23 | 1
10.01.23 | 3
11.01.23 | 3

в результате нужно, таблицу со значениями параметра в интервале, просто с группировкй по значению параметра не получится, т.к. итервал значения параметра может прерываться
Дата Начала | Дата Окончания | Значение параметра
01.01.23 | 04.01.23 | 1
05.01.23 | 07.01.23 | 2
08.01.23 | 09.01.23 | 1
10.01.23 | 11.01.23 | 3
---
```1c
    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 1) КАК Дата,
    1 КАК ЗначениеПараметра
    ПОМЕСТИТЬ ВТ

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 2),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 3),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 4),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 5),
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 6),
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 7),
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 8),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 9),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 10),
    3

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 11),
    3
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ.Дата КАК Дата,
    ВТ.ЗначениеПараметра КАК ЗначениеПараметра
    ПОМЕСТИТЬ ВТ1
    ИЗ
    ВТ КАК ВТ

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(МАКСИМУМ(ВТ.Дата), ДЕНЬ, 1),
    НЕОПРЕДЕЛЕНО
    ИЗ
    ВТ КАК ВТ
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МИНИМУМ(ВложенныйЗапрос.Дата1) КАК Дата1,
    ВложенныйЗапрос.Дата2 КАК Дата2,
    ВложенныйЗапрос.ЗначениеПараметра КАК ЗначениеПараметра
    ПОМЕСТИТЬ ВТ_Границы
    ИЗ
    (ВЫБРАТЬ
    ВТ1.Дата КАК Дата1,
    ВТ1.ЗначениеПараметра КАК ЗначениеПараметра,
    МИНИМУМ(ВТ2.Дата) КАК Дата2
    ИЗ
    ВТ1 КАК ВТ1
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ1 КАК ВТ2
    ПО ВТ1.Дата < ВТ2.Дата
    И ВТ1.ЗначениеПараметра <> ВТ2.ЗначениеПараметра

    СГРУППИРОВАТЬ ПО
    ВТ1.Дата,
    ВТ1.ЗначениеПараметра) КАК ВложенныйЗапрос

    СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Дата2,
    ВложенныйЗапрос.ЗначениеПараметра
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_Границы.Дата1 КАК ДатаНачала,
    ЕСТЬNULL(МАКСИМУМ(ВТ1.Дата), ВТ_Границы.Дата1) КАК ДатаОкончания,
    ВТ_Границы.ЗначениеПараметра КАК ЗначениеПараметра
    ИЗ
    ВТ_Границы КАК ВТ_Границы
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ1 КАК ВТ1
    ПО ВТ_Границы.ЗначениеПараметра = ВТ1.ЗначениеПараметра
    И ВТ_Границы.Дата1 < ВТ1.Дата
    И ВТ_Границы.Дата2 > ВТ1.Дата

    СГРУППИРОВАТЬ ПО
    ВТ_Границы.Дата1,
    ВТ_Границы.ЗначениеПараметра

    УПОРЯДОЧИТЬ ПО
    ДатаНачала
```
---
```1c
    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 1, 0, 0, 0) КАК ДатаСобытия,
    1 КАК Событие
    ПОМЕСТИТЬ НачТаблица

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 2, 0, 0, 0),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 3, 0, 0, 0),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 4, 0, 0, 0),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 5, 0, 0, 0),
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 6, 0, 0, 0),
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 7, 0, 0, 0),
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 8, 0, 0, 0),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 9, 0, 0, 0),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 10, 0, 0, 0),
    3

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 11, 0, 0, 0),
    3
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    НачТаблица.ДатаСобытия КАК Начало,
    НачТаблица1.ДатаСобытия КАК Окончание,
    НачТаблица.Событие
    ПОМЕСТИТЬ ИсхТаблица
    ИЗ
    НачТаблица КАК НачТаблица
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ НачТаблица КАК НачТаблица1
    ПО (ДОБАВИТЬКДАТЕ(НачТаблица.ДатаСобытия, ДЕНЬ, 1) = НачТаблица1.ДатаСобытия)
    И НачТаблица.Событие = НачТаблица1.Событие
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ИсхТаблица.Событие,
    ИсхТаблица.Начало
    ПОМЕСТИТЬ ДатыНачала
    ИЗ
    ИсхТаблица КАК ИсхТаблица
    ЛЕВОЕ СОЕДИНЕНИЕ ИсхТаблица КАК ИсхТаблица2
    ПО ИсхТаблица.Начало = ИсхТаблица2.Окончание
    И ИсхТаблица.Событие = ИсхТаблица2.Событие
    ГДЕ
    ИсхТаблица2.Событие ЕСТЬ NULL
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ИсхТаблица.Событие,
    ИсхТаблица.Окончание
    ПОМЕСТИТЬ ДатыОкончаний
    ИЗ
    ИсхТаблица КАК ИсхТаблица
    ЛЕВОЕ СОЕДИНЕНИЕ ИсхТаблица КАК ИсхТаблица2
    ПО ИсхТаблица.Окончание = ИсхТаблица2.Начало
    И ИсхТаблица.Событие = ИсхТаблица2.Событие
    ГДЕ
    ИсхТаблица2.Событие ЕСТЬ NULL
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ДатыНачала.Событие,
    ДатыНачала.Начало,
    МИНИМУМ(ДатыОкончаний.Окончание) КАК Окончание
    ИЗ
    ДатыНачала КАК ДатыНачала
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатыОкончаний КАК ДатыОкончаний
    ПО ДатыНачала.Событие = ДатыОкончаний.Событие
    И ДатыНачала.Начало < ДатыОкончаний.Окончание

    СГРУППИРОВАТЬ ПО
    ДатыНачала.Событие,
    ДатыНачала.Начало
```
---
Если период 2 года, например, такой запрос не подходит
---
А где это в примере?
---
```1c
    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 1) КАК Дата,
    1 КАК ЗначениеПараметра
    ПОМЕСТИТЬ ВТ

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 2),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 3),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 4),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 5),
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 6),
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 7),
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 8),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 9),
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 10),
    3

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДАТАВРЕМЯ(2023, 1, 11),
    3
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ.Дата КАК Дата,
    ВТ.ЗначениеПараметра КАК ЗначениеПараметра
    ПОМЕСТИТЬ ВТ1
    ИЗ
    ВТ КАК ВТ

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(МАКСИМУМ(ВТ.Дата), ДЕНЬ, 1),
    НЕОПРЕДЕЛЕНО
    ИЗ
    ВТ КАК ВТ
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МИНИМУМ(ВложенныйЗапрос.Дата1) КАК Дата1,
    ВложенныйЗапрос.Дата2 КАК Дата2,
    ВложенныйЗапрос.ЗначениеПараметра КАК ЗначениеПараметра
    ПОМЕСТИТЬ ВТ_Границы
    ИЗ
    (ВЫБРАТЬ
    ВТ1.Дата КАК Дата1,
    ВТ1.ЗначениеПараметра КАК ЗначениеПараметра,
    МИНИМУМ(ВТ2.Дата) КАК Дата2
    ИЗ
    ВТ1 КАК ВТ1
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ1 КАК ВТ2
    ПО ВТ1.Дата < ВТ2.Дата
    И ВТ1.ЗначениеПараметра <> ВТ2.ЗначениеПараметра

    СГРУППИРОВАТЬ ПО
    ВТ1.Дата,
    ВТ1.ЗначениеПараметра) КАК ВложенныйЗапрос

    СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Дата2,
    ВложенныйЗапрос.ЗначениеПараметра
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_Границы.Дата1 КАК ДатаНачала,
    ЕСТЬNULL(МАКСИМУМ(ВТ1.Дата), ВТ_Границы.Дата1) КАК ДатаОкончания,
    ВТ_Границы.ЗначениеПараметра КАК ЗначениеПараметра
    ИЗ
    ВТ_Границы КАК ВТ_Границы
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ1 КАК ВТ1
    ПО ВТ_Границы.ЗначениеПараметра = ВТ1.ЗначениеПараметра
    И ВТ_Границы.Дата1 < ВТ1.Дата
    И ВТ_Границы.Дата2 > ВТ1.Дата

    СГРУППИРОВАТЬ ПО
    ВТ_Границы.Дата1,
    ВТ_Границы.ЗначениеПараметра

    УПОРЯДОЧИТЬ ПО
    ДатаНачала
```
---
Был такой ответ уже
Если период 2 года, например, такой запрос не подходит
---
Почему?
---
Запрос хорош, но не обрабатывает прерывание периода.
Впрочем у ТС нет описание, как должно обрабатываться прерывание периода:

(0) Это два разных периода или один?
01.02.23 | 4
02.02.23 | 4
04.02.23 | 4
05.02.23 | 4
---
чем хорош то запрос, проще тогда запрос с результатом сделать, вместо 1 будет 5 и все запрос не работает.

это 2 разных периода.
---
Поясни что значит "вместо 1 будет 5" ?
---
01.01.23 | 5
02.01.23 | 5
03.01.23 | 5
04.01.23 | 5
05.01.23 | 2
06.01.23 | 2
07.01.23 | 2
08.01.23 | 5
09.01.23 | 5
10.01.23 | 3
11.01.23 | 3

если бы периоды и параметры всегда были бы одинаковы, зачем мне запрос нужен был, и результат всегда одинаковый будет
---
так вроде не проблема, эта таблица раскладывается этим запросом. Не пойму в чем загвоздка?
Запросы с соединением на разницу в один день обрабатывают прерывание периода, запросы с соединением по минимуму периода изменения параметра не обрабатывают, пока две концепции, третей еще не видно.

ПС. вопрос если первый столбец не дата, а любое значение, которое может быть упорядочено и для которого определен инкремент на единицу, вот с этим будут проблемы объективного характера.
---
Впрочем они решаются соединением с таблицей "непрерывных пронумерованных значений эталонного периода" этого столбца, его само собой надо будет сгенерить.
К слову имея такую таблицу возникает кмк третья концепция решения.

ПС. Задача еще интереснее если в качестве значения может присутствовать NULL
---
Не учитывает однодневный интервал
---
Внутреннее на Левое надо заменить и isnull'ом сделать дату окончания
---
А в периодах нет прерываний?
---
Кстати да, период может прерываться,
т.е. например продолжение может быть таким
01.02.23 | 4
02.02.23 | 4
03.02.23 | 4
04.02.23 | 4
---
Ну так, на коленке написал. Вроде работает

```1c
    ВЫБРАТЬ
    &НачДата КАК Дата1,
    1 КАК Знач1
    ПОМЕСТИТЬ ВТ

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачДата, ДЕНЬ, 1),
    1

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачДата, ДЕНЬ, 2),
    1

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачДата, ДЕНЬ, 3),
    1

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачДата, ДЕНЬ, 4),
    2

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачДата, ДЕНЬ, 5),
    2

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачДата, ДЕНЬ, 6),
    2

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачДата, ДЕНЬ, 7),
    1

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачДата, ДЕНЬ, 8),
    1

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачДата, ДЕНЬ, 9),
    3

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачДата, ДЕНЬ, 10),
    3
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ.Дата1 КАК Дата1,
    ВТ.Знач1 КАК Знач1
    ПОМЕСТИТЬ ВТ_Окончания
    ИЗ
    ВТ КАК ВТ
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ1_пред
    ПО (ВТ.Дата1 = ДОБАВИТЬКДАТЕ(ВТ1_пред.Дата1, ДЕНЬ, -1))
    И ВТ.Знач1 = ВТ1_пред.Знач1
    ГДЕ
    ВТ1_пред.Дата1 ЕСТЬ NULL
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ.Дата1 КАК Дата1,
    ВТ.Знач1 КАК Знач1
    ПОМЕСТИТЬ ВТ_Начала
    ИЗ
    ВТ КАК ВТ
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ1_пред
    ПО (ВТ.Дата1 = ДОБАВИТЬКДАТЕ(ВТ1_пред.Дата1, ДЕНЬ, 1))
    И ВТ.Знач1 = ВТ1_пред.Знач1
    ГДЕ
    ВТ1_пред.Дата1 ЕСТЬ NULL
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ различные
    МАКСИМУМ(ВТ_Начала.Дата1) КАК ДатаНач,
    минимум(ВТ_Окончания.Дата1) КАК ДатаКон,
    ВТ.Знач1 КАК Знач1
    ИЗ
    ВТ КАК ВТ
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Начала КАК ВТ_Начала
    ПО (ВТ_Начала.Дата1 <= ВТ.Дата1)
    И ВТ.Знач1 = ВТ_Начала.Знач1
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Окончания КАК ВТ_Окончания
    ПО (ВТ_Окончания.Дата1 >= ВТ.Дата1)
    И ВТ.Знач1 = ВТ_Окончания.Знач1

    СГРУППИРОВАТЬ ПО
    ВТ.Знач1, ВТ.Дата1
```
---
(7)
(10) вам деньги за это платят, что ли. Такой вариант уже был, зачем это городить, проще тогда результирующую таблицу сразу сделать.
А если период 2 года и значения параметров могут быть разные.
---
Фигасе, товарищ. Не хотите помощи - ну наср..ть тогда, сами думайте.
---
Тут просто наполнение таблицы люди делают в запросе, чтобы понятнее было, достаточно заменить всю первую часть запроса на

```1c
    ВЫБРАТЬ ТвояТаблица.Дата КАК Дата1, ТвояТаблица.ЗначениеПараметра КАК Знач1 ПОМЕСТИТЬ ВТ ИЗ &ТвояТаблица КАК ТвояТаблица
```

И дальше запрос.УстановитьПараметр("ТвояТаблица", ТвояТаблица)

И какую хочешь таблицу можно передавать, главное, чтобы было 2 колонки(Дата и ЗначениеПараметра), а сколько там строк - неважно.
---
блин, да понял не сразу
---
если он этого не понял, то нет смысла что-то объяснять дальше - не поймет.