![]() |
|
Объединение интервалов дат в запросе | ☑ | ||
---|---|---|---|---|
0
егаис
05.01.24
✎
12:06
|
Есть таблица вида Сотрудник / ДатаНачала / ДатаОкончания, данные из табеля
Иванов / 01.12.23 / 01.12.23 Иванов / 02.12.23 / 02.12.23 Иванов / 05.12.23 / 05.12.23 Иванов / 06.12.23 / 06.12.23 Как запросом получить? Иванов / 01.12.23 / 02.12.23 Иванов / 05.12.23 / 06.12.23 пробовал по методу Ильдаровича, но там походу нужны смежные периоды. Такой код отработал "криво". Часть периодов свернул, часть - нет Запрос.Текст = "ВЫБРАТЬ | ТаблицаПериодов.Сотрудник КАК Сотрудник, | ТаблицаПериодов.Период КАК НачалоПериода, | ТаблицаПериодов.Период, ДЕНЬ КАК КонецПериода |ПОМЕСТИТЬ Дано |ИЗ | &ТаблицаПериодов КАК ТаблицаПериодов |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Дано.НачалоПериода, | Дано.КонецПериода, | Дано.Сотрудник, | СУММА(РАЗНОСТЬДАТ(Слева.НачалоПериода, Слева.КонецПериода, ДЕНЬ) + 1) КАК Интеграл |ПОМЕСТИТЬ ДаноПлюс |ИЗ | Дано КАК Дано | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Дано КАК Слева | ПО (Слева.НачалоПериода <= Дано.НачалоПериода) | |СГРУППИРОВАТЬ ПО | Дано.НачалоПериода, | Дано.КонецПериода, | Дано.Сотрудник |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | МИНИМУМ(Дано.НачалоПериода) КАК НачалоПериода, | МАКСИМУМ(Дано.КонецПериода) КАК КонецПериода, | Дано.Сотрудник |ИЗ | ДаноПлюс КАК Дано | |СГРУППИРОВАТЬ ПО | ДОБАВИТЬКДАТЕ(Дано.КонецПериода, ДЕНЬ, -Дано.Интеграл), | Дано.Сотрудник"; |
|||
1
егаис
05.01.24
✎
12:16
|
есть такие данные
Иванов / 09.12.23 / 09.12.23 Иванов / 10.12.23 / 10.12.23 Иванов / 11.12.23 / 11.12.23 Иванов / 12.12.23 / 12.12.23 в итоге запрос свернул так Иванов / 09.12.23 / 09.12.23 Иванов / 10.12.23 / 12.12.23 почему-то 09 и 10 числа не объединил. |
|||
2
егаис
05.01.24
✎
12:20
|
нашел ошибку. Решение работает, если сотрудник один в таблице. Если несколько , то надо добавить в соединение и сотрудника
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Дано КАК Слева | ПО (Слева.НачалоПериода <= Дано.НачалоПериода) | И (Слева.Сотрудник = Дано.Сотрудник) закрывем тему |
|||
3
SleepyHead
05.01.24
✎
18:48
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |