Первое, что я делаю , когда я создаю новую базу данных, это создание и заполнение некоторых базовых таблиц.
Один - это список всех целых чисел от -N до N, другой - список дат от 5 лет в прошлом до 10 лет в будущем (запланированное задание может продолжать создавать их по мере необходимости, в будущем) и последнее это список всех часов в течение дня. Например, inetgers:
create table numbers (n integer primary key);
insert into numbers values (0);
insert into numbers select n+1 from numbers; commit;
insert into numbers select n+2 from numbers; commit;
insert into numbers select n+4 from numbers; commit;
insert into numbers select n+8 from numbers; commit;
insert into numbers select n+16 from numbers; commit;
insert into numbers select n+32 from numbers; commit;
insert into numbers select n+64 from numbers; commit;
insert into numbers select n+128 from numbers; commit;
insert into numbers select n+256 from numbers; commit;
insert into numbers select n+512 from numbers; commit;
insert into numbers select n+1024 from numbers; commit;
insert into numbers select n+2048 from numbers; commit;
insert into numbers select n+4096 from numbers; commit;
insert into numbers select n+8192 from numbers; commit;
insert into numbers select -n from numbers where n > 0; commit;
Это для DB2 / z с автоматическим запуском транзакции, поэтому кажется, что он имеет голые коммиты.
Да, он занимает (минимальное) пространство, но облегчает написание запросов намного , просто выбирая значения из этих таблиц. Он также очень переносим во всех любых СУБД на основе SQL.
Ваш конкретный запрос будет простым:
select n from numbers where n >=3 and n <= 10;
Значения часов и диапазоны дат весьма полезны для приложений, в которых мы работаем. Это позволяет нам создавать нулевые записи для тех часов дня (или дат), у которых нет реальных данных, чтобы вместо (где нет данных на второе число месяца):
Date | Quantity
-----------+---------
2009-01-01 | 7
2009-01-03 | 27
2009-01-04 | 6
вместо этого мы можем получить:
Date | Quantity
-----------+---------
2009-01-01 | 7
2009-01-02 | 0
2009-01-03 | 27
2009-01-04 | 6