как в запросе грамотно посчитать дни #709880


#0 by Segate
надо посчитать колличество дней Есть датаНачалаДействия Есть датаКонцаДействия соответственно количество дней можно посчитать как РазностьДат(начало, конец, день). Но в таком случае если дата начала совпадает с датой конца, функция выдаст 0, а надо 1н. Но и это еще не все, если в один день есть несколько записей, то надо, чтобы они все равно группировались в 1н день. т.е. при исходных данных Дата начала       Дата конца 01.01.01 00.00   01.01.01 01.00 01.01.01 02.00   01.01.01 14.00 01.01.01 22.00   02.01.01 01.00 04.02.01 00.00   04.02.01 11.00 запрос должен выдавать 3 дня.
#1 by Cube
Алгоритм: 1). Налить чай. 2). Сгруппировать записи. Найти максимум и минимум. 3). Откусить булочку. 4). Сделать РазностьДат. 5). Хлебнуть чая...
#2 by Рэйв
Приведи все даты к началу дня через НАЧАЛОПЕРИОДА и сгруппируй
#3 by Segate
о, должно сработать.
#4 by Cube
А смысл? Лишнее действие...
#5 by agorbunov
Приведи дату начала - к началу дня, дату конца - к концу дня. Выбери различные. Чтобы в течение одного дня был 1 день, используй ВЫРАЗИТЬ(разностьдат(ДатаНачал, ДатаКонца, ЧАС)/24  КАК ЧИСЛО(10,0))
#6 by Cube
Ты чай налил?
#7 by Cube
Бугагашеньки)))))
#8 by agorbunov
Да, косяк. Так на двух соседних датах выдаст 2.
#9 by fisher
Задача не такая тривиальная, как кажется. Правильного решения пока не увидел.
#10 by Серго62
Пятнично :)
#11 by Серго62
Давай свой вариант
#12 by fisher
Он будет не настолько простой, чтобы мне не было лень этим заниматься. Суть в том, что нужно получить таблицу всех дат ВНУТРИ ВСЕХ ДИАПАЗОНОВ и сгруппировать.
#13 by Серго62
РазностьДат+1 не оно?
#14 by Cube
А, так тебе не разность дат, а количество дат надо?))
#15 by tdm
а разве началоПериода(,,день) и группировка с получение кол-ва различных не сработает ? как в и написано
#16 by Cube
+ Хлебнул чая:         1          ОБЪЕДИНИТЬ         2          ОБЪЕДИНИТЬ         3          ОБЪЕДИНИТЬ         4          ОБЪЕДИНИТЬ         5          ОБЪЕДИНИТЬ         6          ОБЪЕДИНИТЬ         7          ОБЪЕДИНИТЬ         8          ОБЪЕДИНИТЬ                  1                  ОБЪЕДИНИТЬ             2                  ОБЪЕДИНИТЬ             3                  ОБЪЕДИНИТЬ             4                  ОБЪЕДИНИТЬ             5                  ОБЪЕДИНИТЬ             6                  ОБЪЕДИНИТЬ             7                  ОБЪЕДИНИТЬ             8                  ОБЪЕДИНИТЬ                      1                  ОБЪЕДИНИТЬ             2                  ОБЪЕДИНИТЬ             3                  ОБЪЕДИНИТЬ             4                  ОБЪЕДИНИТЬ             5                  ОБЪЕДИНИТЬ             6                  ОБЪЕДИНИТЬ             7                  ОБЪЕДИНИТЬ             8                  ОБЪЕДИНИТЬ                      1                  ОБЪЕДИНИТЬ             2                  ОБЪЕДИНИТЬ             3                  ОБЪЕДИНИТЬ             4                  ОБЪЕДИНИТЬ             5                  ОБЪЕДИНИТЬ             6                  ОБЪЕДИНИТЬ             7                  ОБЪЕДИНИТЬ             8                  ОБЪЕДИНИТЬ
#17 by fisher
Нет. Нужно посчитать количество дней ВНУТРИ диапазонов, без учета ПЕРЕСЕЧЕНИЙ диапазонов. Если я правильно понял условие.
#18 by fisher
Во. Похоже на правду.
#19 by DS
Все так, только не количество различных, а максимум.
#20 by Segate
да, именно так. похоже на правду, но уж очень хочется более изящного решения... не люблю я такое в запросах )
#21 by Segate
смотри фишер умеет костноязычных понимать и нормально интерпритировать )))
#22 by fisher
Изящнее не получится. Календарь по-любому нужен. Можно разве что компактнее и красивее оформить через промежуточную временную таблицу. Или использовать готовую таблицу календаря, если такая есть в конфигурации.
#23 by Segate
Окей... спасибо всем, буду делать через календарь.
#24 by DS
Если есть вложенные интервалы, изящнее сделать сложно. Если нет - .
#25 by DS
*вложенные и пересекающиеся
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С