Я минут 15 думал как получить натуральный ряд в запросе (специально не стал смотреть как устроено решение в интернете, чтобы не пойти по накату)
Поставил задачу получить линейную функциию от декартового произведения нескольких множеств .
Поиграл с простыми числами, рядами.... применил теорию вероятности (в части распределения)... почти добился результата... но некоторые записи все таки повторялись, что конечно легко решалось группировкой. Но хотелось не терять ни одной строчки декартового произведения. Как только я поставил это условие, сразу пришло просто решение.
Изучив предложенный код вы сами с легкостью напишите запросы для ваших нужд.
Добавив условие "Выражение" < 500 легко ограничть список из 1024 элементов... если вам нужно только 500.
Преимуществом данного способа является то что он совершенно нетрудоемок для "компилятора", у меня список из 1..1000000 элементов формируется 10 секунд и еще 12 секунд просто выводится в отчет.
На всякий случай добавил запрос для формирования списка дат по порядку от ДатаНач до ДатаКон
Надеюсь с новым способом ваши запросы станут еще элегантнее и чуть чуть быстрее.
Порядковый Номер 1..64
ВЫБРАТЬ 0 КАК Поле ПОМЕСТИТЬ Числа
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ (Числа1.Поле+4*Числа2.Поле+16*Числа3.Поле)+1 КАК Поле
ИЗ Числа КАК Числа1, Числа КАК Числа2, Числа КАК Числа3
УПОРЯДОЧИТЬ ПО Поле
Порядковый Номер 1..256
ВЫБРАТЬ 0 КАК Поле ПОМЕСТИТЬ Числа
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ (Числа1.Поле+4*Числа2.Поле+16*Числа3.Поле+64*Числа4.Поле)+1 КАК Поле
ИЗ Числа КАК Числа1, Числа КАК Числа2, Числа КАК Числа3, Числа КАК Числа4
УПОРЯДОЧИТЬ ПО Поле
Порядковый Номер 1..1024
ВЫБРАТЬ 0 КАК Поле ПОМЕСТИТЬ Числа
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ (Числа1.Поле+4*Числа2.Поле+16*Числа3.Поле+64*Числа4.Поле+256*Числа5.Поле)+1 КАК Поле
ИЗ Числа КАК Числа1, Числа КАК Числа2, Числа КАК Числа3, Числа КАК Числа4, Числа КАК Числа5
УПОРЯДОЧИТЬ ПО Поле
Порядковый Номер 1..1000000
ВЫБРАТЬ 0 КАК Поле ПОМЕСТИТЬ Числа
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ (Числа1.Поле+10*Числа2.Поле+100*Числа3.Поле+1000*Числа4.Поле+10000*Числа5.Поле+100000*Числа6.Поле)+1 КАК Поле
ИЗ Числа КАК Числа1, Числа КАК Числа2, Числа КАК Числа3, Числа КАК Числа4, Числа КАК Числа5, Числа КАК Числа6
УПОРЯДОЧИТЬ ПО Поле
Интервал дат ДатаНач..ДатаКон (но не более 1024 дня)
ВЫБРАТЬ 0 КАК Поле ПОМЕСТИТЬ Цифры
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1024
Числа1.Поле + 4 * Числа2.Поле + 16 * Числа3.Поле + 64 * Числа4.Поле + 256 * Числа5.Поле + 1 КАК Поле
ПОМЕСТИТЬ Числа
ИЗ Цифры КАК Числа1, Цифры КАК Числа2, Цифры КАК Числа3, Цифры КАК Числа4, Цифры КАК Числа5
УПОРЯДОЧИТЬ ПО Поле ;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&ДатаНач, ДЕНЬ, Поле) КАК ПолеДата
ИЗ Числа КАК Числа
ГДЕ Поле < = РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, ДЕНЬ)