|
Порешаем задачки? Как в запросе разбить год на периоды из списка дат? | ☑ | ||
---|---|---|---|---|
0
Vladal
10.10.16
✎
11:26
|
Есть таблица с периодом 01.01.2016 -- 31.12.2016
|выбрать | датавремя(2016,01,01,0,0,0) как НачалоПериода, | датавремя(2016,12,31,0,0,0) как КонецПериода |поместить втПериодГод Есть таблица с датами начала периодов, например, такая: |;выбрать | датавремя(2016,01,01,0,0,0) как РазделительПериодов |поместить втРазделителиПериодов |объединить все датавремя(2016,09,06,0,0,0) |объединить все датавремя(2016,10,10,0,0,0) Надо получить таблицу с разбивкой этого года по периодам: |01.01.2016 -- 05.09.2016 |06.09.2016 -- 09.10.2016 |10.10.2016 -- 31.12.2016 Я сделал так: соединял начало периода из первой таблицы с датам из второй (-1 день), получилось так: |Начало года период |01.01.2016 -- 05.09.2016 |01.01.2016 -- 09.10.2016 |01.01.2016 -- 31.12.2016 А теперь надо добавить и начало следующего периода, а как - не пойму. Подскажите, пожалуйста. |
|||
1
Мойдодыр
10.10.16
✎
11:29
|
так это же срез последних на каждую дату
|
|||
2
В тылу врага
10.10.16
✎
11:30
|
МИНИМУМ
|
|||
3
Vladal
10.10.16
✎
11:30
|
(1) ТИпа того, очень похоже.
|
|||
4
Vladal
10.10.16
✎
11:31
|
(2) минимум выдает 1 января, а я хочу присобачить как начало периода предыдущую строку из той таблицы, откуда взял дату конца периода
|
|||
5
В тылу врага
10.10.16
✎
11:32
|
(4) не тупи, все работает: группируем по началам, минимум по концам
|
|||
6
iceman2112
10.10.16
✎
11:32
|
Левое соединение само с собой и группировка.
|
|||
7
Garykom
гуру
10.10.16
✎
11:36
|
и никого не удивляет после таких "операций на гландах через задний проход автогеном" что типовые тормозят на крутом сервере?
|
|||
8
azernot
10.10.16
✎
12:01
|
ВЫБРАТЬ
ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0) КАК НачалоПериода, ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59) КАК КонецПериода ПОМЕСТИТЬ втПериодГод ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0) КАК РазделительПериодов ПОМЕСТИТЬ втРазделителиПериодов ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РАЗЛИЧНЫЕ ДАТАВРЕМЯ(2016, 9, 6, 0, 0, 0) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2016, 10, 10, 0, 0, 0) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ВсеПериоды.Период ПОМЕСТИТЬ ВсеПериоды ИЗ (ВЫБРАТЬ втПериодГод.НачалоПериода КАК Период ИЗ втПериодГод КАК втПериодГод ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ втПериодГод.КонецПериода ИЗ втПериодГод КАК втПериодГод ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РАЗЛИЧНЫЕ втРазделителиПериодов.РазделительПериодов ИЗ втРазделителиПериодов КАК втРазделителиПериодов) КАК ВсеПериоды ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НачалоПериода(Периоды.НачалоПериода, День) КАК НачалоПериода, ВЫБОР КОГДА Периоды.КонецПериода = МаксимальныйПериод.Период ТОГДА Периоды.КонецПериода ИНАЧЕ КонецПериода(ДОБАВИТЬКДАТЕ(Периоды.КонецПериода, ДЕНЬ, -1), День) КОНЕЦ КАК КонецПериода ИЗ (ВЫБРАТЬ ВсеПериоды.Период КАК НачалоПериода, МИНИМУМ(ВсеПериоды1.Период) КАК КонецПериода ИЗ ВсеПериоды КАК ВсеПериоды ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеПериоды КАК ВсеПериоды1 ПО ВсеПериоды.Период < ВсеПериоды1.Период СГРУППИРОВАТЬ ПО ВсеПериоды.Период) КАК Периоды ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ МАКСИМУМ(ВсеПериоды.Период) КАК Период ИЗ ВсеПериоды КАК ВсеПериоды) КАК МаксимальныйПериод ПО (ИСТИНА) УПОРЯДОЧИТЬ ПО НачалоПериода |
|||
9
Vladal
10.10.16
✎
13:16
|
(8) Чудесно! Спасибо!
Я понял эту идею - получить все даты и потом к ним добавить эту же таблицу и получить конец интервала периода. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |