Получение данных по неделям с помощью запроса

1. user1713496 22.10.23 18:29 Сейчас в теме
Добрый день. Подскажите, пожалуйста, можно ли с помощью запроса получить данные за период, выводимые по неделям? Интересует именно без цикла пока начало периода <= конец периода и тому подобных, а одним запросом.
По теме из базы знаний
Найденные решения
4. Vinzor 99 22.10.23 21:03 Сейчас в теме
(3) Ну это же не сложно.
Вам надо в запросе получить опорную таблицу, в которой будет выборка в виде календарных дат в периоде между &датой начала и &датой окончания, а также номер недели этих дат и день недели этих дат. (для удобства группировок).
А потом к этой таблице приматывайте выборку значений (некий регистр накопления, с записями по периоду в виде "Дата и время"?).
Условия связи таблиц типа "ПредставленияПериоды.Дата = НачалоПериода(ВашРегистрНакопления.Период, день)"

Дарю запрос опорной таблицы периодов. (Упорядочить потом уберите, оно сейчас просто для "красоты в консоли")

ВЫБРАТЬ 0 КАК Цифра
ПОМЕСТИТЬ ВТЦифры
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 9;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, Цифры.Цифра + ЕСТЬNULL(Цифры10.Цифра, 0) * 10 + ЕСТЬNULL(Цифры100.Цифра, 0) * 100 + ЕСТЬNULL(Цифры1000.Цифра, 0) * 1000 + ЕСТЬNULL(Цифры10000.Цифра, 0) * 10000 + ЕСТЬNULL(Цифры100000.Цифра, 0) * 100000), ДЕНЬ) КАК Период
ПОМЕСТИТЬ ПредставленияПериоды
ИЗ
ВТЦифры КАК Цифры
ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры10
ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 9)
ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры100
ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 99)
ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры1000
ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 999)
ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры10000
ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 9999)
ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры100000
ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 99999)
ГДЕ
НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, Цифры.Цифра + ЕСТЬNULL(Цифры10.Цифра, 0) * 10 + ЕСТЬNULL(Цифры100.Цифра, 0) * 100 + ЕСТЬNULL(Цифры1000.Цифра, 0) * 1000 + ЕСТЬNULL(Цифры10000.Цифра, 0) * 10000 + ЕСТЬNULL(Цифры100000.Цифра, 0) * 100000), ДЕНЬ)
МЕЖДУ &НачалоПериода И &ОкончаниеПериода
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ВТЦифры
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ПредставленияПериоды.Период КАК Дата,
НЕДЕЛЯ(ПредставленияПериоды.Период) КАК НомерНедели,
ДЕНЬНЕДЕЛИ(ПредставленияПериоды.Период) КАК ДеньНедели
ИЗ
ПредставленияПериоды КАК ПредставленияПериоды
Упорядочить по Дата Автоупорядочивание
user1713496; +1 Ответить
6. Said-We 23.10.23 00:03 Сейчас в теме
(5) Год ещё не забыть... Каждый год номер недели повторяется...
Прикрепленные файлы:
user1713496; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 22.10.23 19:59 Сейчас в теме
В некоторых случаях можно.
3. user1713496 22.10.23 20:22 Сейчас в теме
(2)подскажите, пожалуйста, где пример можно посмотреть?
4. Vinzor 99 22.10.23 21:03 Сейчас в теме
(3) Ну это же не сложно.
Вам надо в запросе получить опорную таблицу, в которой будет выборка в виде календарных дат в периоде между &датой начала и &датой окончания, а также номер недели этих дат и день недели этих дат. (для удобства группировок).
А потом к этой таблице приматывайте выборку значений (некий регистр накопления, с записями по периоду в виде "Дата и время"?).
Условия связи таблиц типа "ПредставленияПериоды.Дата = НачалоПериода(ВашРегистрНакопления.Период, день)"

Дарю запрос опорной таблицы периодов. (Упорядочить потом уберите, оно сейчас просто для "красоты в консоли")

ВЫБРАТЬ 0 КАК Цифра
ПОМЕСТИТЬ ВТЦифры
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 9;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, Цифры.Цифра + ЕСТЬNULL(Цифры10.Цифра, 0) * 10 + ЕСТЬNULL(Цифры100.Цифра, 0) * 100 + ЕСТЬNULL(Цифры1000.Цифра, 0) * 1000 + ЕСТЬNULL(Цифры10000.Цифра, 0) * 10000 + ЕСТЬNULL(Цифры100000.Цифра, 0) * 100000), ДЕНЬ) КАК Период
ПОМЕСТИТЬ ПредставленияПериоды
ИЗ
ВТЦифры КАК Цифры
ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры10
ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 9)
ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры100
ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 99)
ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры1000
ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 999)
ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры10000
ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 9999)
ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры100000
ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), НАЧАЛОПЕРИОДА(&ОкончаниеПериода, ДЕНЬ), ДЕНЬ) > 99999)
ГДЕ
НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, Цифры.Цифра + ЕСТЬNULL(Цифры10.Цифра, 0) * 10 + ЕСТЬNULL(Цифры100.Цифра, 0) * 100 + ЕСТЬNULL(Цифры1000.Цифра, 0) * 1000 + ЕСТЬNULL(Цифры10000.Цифра, 0) * 10000 + ЕСТЬNULL(Цифры100000.Цифра, 0) * 100000), ДЕНЬ)
МЕЖДУ &НачалоПериода И &ОкончаниеПериода
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ВТЦифры
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ПредставленияПериоды.Период КАК Дата,
НЕДЕЛЯ(ПредставленияПериоды.Период) КАК НомерНедели,
ДЕНЬНЕДЕЛИ(ПредставленияПериоды.Период) КАК ДеньНедели
ИЗ
ПредставленияПериоды КАК ПредставленияПериоды
Упорядочить по Дата Автоупорядочивание
user1713496; +1 Ответить
5. user1713496 22.10.23 21:51 Сейчас в теме
6. Said-We 23.10.23 00:03 Сейчас в теме
(5) Год ещё не забыть... Каждый год номер недели повторяется...
Прикрепленные файлы:
user1713496; +1 Ответить
7. user1713496 25.10.23 21:59 Сейчас в теме
Оставьте свое сообщение

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