|
Получить список дней в запросе | ☑ | ||
---|---|---|---|---|
0
Vladislava-smile
08.12.16
✎
03:29
|
Есть текущая дата, надо получить список дат, отнимая сначала от текущей 2 недели, а потом от каждой последней 2 недели. Можно ли решить этот вопрос средствами запроса?
|
|||
1
Karlay
08.12.16
✎
03:34
|
Конечно. Функция ДОБАВИТЬКДАТЕ в помощь
|
|||
2
Vladislava-smile
08.12.16
✎
03:49
|
(1) Допустим сегодня 08.12.2016, функцией ДобавитьКДате мы получим 24.11.2016, а дальше как зациклить?
нам надо список дат: 08.12.2016, 24.11.2016, 10.11.2016 и т.д. до начала года допустим |
|||
3
shadow_sw
08.12.16
✎
04:08
|
зациклить в запросе - никак, обрабатывать результат запроса
|
|||
4
Vladislava-smile
08.12.16
✎
04:14
|
(3) - ну ясн, спс
|
|||
5
vyaz
08.12.16
✎
08:30
|
ВЫБРАТЬ
0 КАК Цифры ПОМЕСТИТЬ ВТ_Цифры ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, -(ВТ_Цифры.Цифры + ВТ_Цифры1.Цифры * 10 + ВТ_Цифры2.Цифры * 100 - 1) * 14) КАК Поле1 ИЗ ВТ_Цифры КАК ВТ_Цифры ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Цифры КАК ВТ_Цифры1 ПО (ИСТИНА) ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Цифры КАК ВТ_Цифры2 ПО (ИСТИНА) ГДЕ (ВТ_Цифры.Цифры + ВТ_Цифры1.Цифры * 10 + ВТ_Цифры2.Цифры * 100 - 1) * 14 > 0 УПОРЯДОЧИТЬ ПО Поле1 УБЫВ |
|||
6
vyaz
08.12.16
✎
08:31
|
это на 38 лет в глубину, но при желании можно увеличить
|
|||
7
RomaH
naïve
08.12.16
✎
08:37
|
отнимая сначала от текущей 2 недели, а потом от каждой последней 2 недели
что такое 2 недели? |
|||
8
RomaH
naïve
08.12.16
✎
08:37
|
что вы под этим понимаете?
|
|||
9
vyaz
08.12.16
✎
08:44
|
последний запрос перемудрил, проще так
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, -(ВТ_Цифры.Цифры + ВТ_Цифры1.Цифры * 10 + ВТ_Цифры2.Цифры * 100) * 14) КАК ДатаСИнтервалом2Недели ИЗ ВТ_Цифры КАК ВТ_Цифры ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Цифры КАК ВТ_Цифры1 ПО (ИСТИНА) ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Цифры КАК ВТ_Цифры2 ПО (ИСТИНА) |
|||
10
Fedor-1971
08.12.16
✎
08:49
|
(5) и когда это остановится?
(0) Нужно именно сформировать в запросе или получить в запрос?
|
|||
11
vyaz
08.12.16
✎
08:51
|
(10) в 1978 году, но никто не мешает ограничить выборку по дате :)
|
|||
12
Fedor-1971
08.12.16
✎
09:02
|
(11) Условие прибьёт выполнение на первой же строке:
(ВТ_Цифры.Цифры + ВТ_Цифры1.Цифры * 10 + ВТ_Цифры2.Цифры * 100 - 1) * 14 > 0 соответствует (0+0*10+0*100-1)*14 = -14 |
|||
13
vyaz
08.12.16
✎
09:08
|
(12) все верно, я условие написал, чтоб убрать -14 и 0, но в (9) вообще отказался от условия, сразу затупил просто с N-1, в данном случае можно отказаться от этого
|
|||
14
Fedor-1971
08.12.16
✎
09:17
|
(13) можно и с условием из (5), только нужно цифру 0 поставить последней, а не первой
|
|||
15
b_ru
08.12.16
✎
09:20
|
Будьте проще.
ВЫБРАТЬ Календарь.Дата ИЗ Календарь КАК Календарь ГДЕ Календарь.Дата <= &ТекущаяДата И ВЫРАЗИТЬ(РАЗНОСТЬДАТ(Календарь.Дата, &ТекущаяДата, ДЕНЬ) / 7) КАК ЧИСЛО(10,0)) = РАЗНОСТЬДАТ(Календарь.Дата, &ТекущаяДата, ДЕНЬ) / 7
Календарь - какая-нибудь таблица со всеми числами. Производственный календарь в любой типовой найдется. |
|||
16
vyaz
08.12.16
✎
09:28
|
(15) раз уж у тебя есть календарь сделай нам запрос, чтоб две недели состояли только из рабочих дней, исключаем выходные и праздники))))
|
|||
17
Fedor-1971
08.12.16
✎
09:35
|
(15) Конфигурация не озвучена, как и цель сего действа.
Серьёзно считаешь что сравнение будет работать быстрее чем вычитание? Вот это феерично:
т.е. каждый раз дважды вычислить разность в днях и поделить, один раз округлить, и только потом сравнить проще чем отнять? Порадовал, ты сделал мой день. ТС исчез. |
|||
18
Fedor-1971
08.12.16
✎
09:37
|
17+ да, и какой результат получим если твой календарь тупо не заполнил пользователь
|
|||
19
b_ru
08.12.16
✎
10:09
|
(17) Кого-то тут волнует быстродействие? Если говорить о нем, то такие вещи в любом случае не стоит делать на языке запросов, он для такого не предназначен. Мой вариант просто читабельнее.
Кстати, если не знал, разностьдат разворачивается в одну единственную операцию вычитания лонгинтов. |
|||
20
Fedor-1971
08.12.16
✎
10:32
|
(19) меня волнует. Большая проблема современного кодинга, практически на любом языке, наплевательское отношение к оптимизации быстродействия с обоснованием "Выполнится за 0,5 или за 0,7 сек пользователь этого не заметит", ещё и как заметит когда попытается пересчитать данные, например, за месяц. Тут 0,1 там 0,2 и сидим час ждём первой звезды. Сервер заметит, когда будет считать для N пользователей такую лабуду.
А потом 1С (или что другое) лажа, работает медленно, сырая и т.д. Сервера надо мощнее некуда и дороженные. Читабельнее и удобнее (10), реализуемебельнее (5), при условии, что нужно получить именно запросом |
|||
21
b_ru
08.12.16
✎
10:48
|
(20) Большая проблема современного кодинга - малообразованные кодеры, которые не соображают, что и когда нужно оптимизировать, не соображают как работают стеки современных технологий, ну и срутся на форуме вместо того, чтобы работу работать. Пойду бороться с третьей проблемой, а ты попробуй с первыми двумя.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |