К основному контенту

Сообщения

Сообщения за март, 2015

Запросы. Объеденяем периоды действия

Прошлая задача с периодами обрела новую форму (и да, задача по прежнему упрощена - периоды в днях) Нужно таблицу вида Дата Начала  Дата Окончания 01.01.2015    11.01.2015 17.01.2015    18.01.2015 19.01.2015    20.01.2015 21.01.2015    22.01.2015 28.01.2015    28.01.2015 привести к таблице вида Дата Начала Дата Окончания 01.01.2015    11.01.2015 17.01.2015    22.01.2015 28.01.2015    28.01.2015 Пришел к следующему решению, используя ранее накопленные знания - Период по дням - Собираем периоды действия PROFIT!

Запросы.РАЗНОСТЬДАТ(СЕКУНДА) и MS SQL. Ошибка HResult 80040E57

Столкнулся сегодня с ошибкой выполнения запроса в котором применяется функция РАЗНОСТЬДАТ(Дата1,Дата2,СЕКУНДА). Ошибка воспроизводится в Клиент-Серверном варианте, где в качестве СУБД семейства MS SQL Server HResult 80040E57 "difference of two datetime columns caused overflow at runtime" Причина в ограничении использования DateDiff (результат перевода Языка запросов 1С в T-SQL) DATEDIFF produces an error if the result is out of range for integer values. For milliseconds, the maximum number is 24 days, 20 hours, 31 minutes and 23.647 seconds . For seconds, the maximum number is 68 years. https://msdn.microsoft.com/ UPD: ошибка справедлива и для файлового варианта информационной базы. UPD 2: ошибка справедлива и для Вычисляемых полей СКД Суть решения - проверить разность дат, и если разность дат больше 68 лет - рассчитать число секунд "в ручную". Количество секунд от первых суток периода + количество "полных" дней в пери

Запрос. Собираем периоды действия.

Да задача изначальна упрощена - меня интересуют непрерывные периоды действия в днях. Превращаем таблицу вида Дата 01.01.2015 02.01.2015 04.01.2015 05.01.2015 06.01.2015 12.01.2015 в таблицу ДатаНачала ДатаОкончания 01.01.2015 02.01.2015 04.01.2015 06.01.2015 12.01.2015 12.01.2015 Главная хитрость/идея: сравнить разность дат (получаем все возможные периоды для исходного множества) границ периода и количества вхождений дат (элементов множества) в этот период КОЛИЧЕСТВО ( НАЧАЛОПЕРИОДА ( втДаты . Дата , ДЕНЬ ) ) - 1 = РАЗНОСТЬДАТ ( втВариации . ДатаНачала , втВариации . ДатаОкончания , ДЕНЬ )   Собственно текст запроса под катом