Как построить запрос Access, который содержит каждую дату в диапазоне календаря? - PullRequest
4 голосов
/ 13 декабря 2011

У меня есть таблица activities записей активности, например ::

ID | Date       | Activity | Participant
---+------------+----------+
1  | 11/30/2011 | Skiing   | Alice
2  | 11/29/2011 | Diving   | Gary
3  | 10/15/2011 | Running  | Therese

и я хотел бы запросить для заданного диапазона дат, какие дни были активными, а какие нет, для каждого участника, например, для 11 / 29-11 / 30,

Date  |  Activity | Participant
------+-----------+------------
11/29 |           | Alice
11/30 | Skiing    | Alice
11/29 | Diving    | Gary 
11/30 |           | Gary
11/29 |           | Therese
11/30 |           | Therese

Мой текущий план состоит в том, чтобы составить таблицу allDates всех дат в году, взять декартово запрос продукта cartDateParticipant:

select date,participant from allDates,(select distinct participant from activities) as participants

и оставили присоединиться к этому запросу против activities:

select a.date, c.activity, c.participant from allDates a
left join
cartDateParticipant c
on
a.date=c.date
and
a.participant=c.participant

, который будет работать, но это означает, что я должен хранить таблицу дат для любого возможного диапазона дат, введенного пользователем. Есть ли способ сгенерировать последовательность дат на лету в Access, не сохраняя ее в виде таблицы? Или есть лучший способ написать этот запрос?

РЕДАКТИРОВАТЬ: клиент наконец уступил и решил, что пустые строки не нужны, поэтому я просто написал его как стандартный запрос.

1 Ответ

6 голосов
/ 13 декабря 2011

Я рискну ответить, так как никто другой не имеет.Создание таблицы дат не является, возможно, особенно крутым или умным.Тем не менее, это просто понять, и, следовательно, просто реализовать и поддерживать.Я придерживаюсь этого метода и говорю: «Нет, лучшего способа написать запрос» с помощью MS Access.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...