2011-12-13 28 views
4

我有一個表活動條目的activities,如:如何構建包含日曆範圍內每個日期的Access查詢?

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

爲什麼不保留任何可能日期的日期表?你只會創建一次這個表,它不會有那麼多行。一百年只有約36千行。 –

+0

什麼原因有空白的日期/用戶。數據的缺乏就是數據。如果沒有用戶/該日期,則該日期的用戶沒有任何活動。爲什麼創建數據? – xQbert

+0

@ypercube:yours就是答案,即爲什麼當你可以把它放在一個表中並加入它時,就可以隨時生成數據? – onedaywhen

回答

6

我會冒昧回答,因爲沒有其他人。創建日期表並不是特別酷或很聰明。但是,它很容易理解,因此很容易實施和維護。我會堅持使用該方法,並且使用MS Access說「不,沒有更好的方法來編寫查詢」。

+3

我不同意:創建一個日期表**是**很酷和聰明,+1作爲一個答案冒險這個) – onedaywhen

+2

+1我寫了幾個會計程序,包括本地YrMos表。它包含Year,Month,MonthStartDate,MonthEndDate和NumOfDays的字段。相同的概念。我把你的情況看作是一個擴展的用例。一旦你過去認爲你錯過了一些聰明的東西(也許還有更多**聰明的**,但它可能不會更**性**),你會發現我與@分享的情感onedaywhen:*創建一個日期表**是**酷和聰明* – mwolfe02

+0

@onedaywhen點取; 「酷和聰明」並不能很好地表達我的想法。這個想法有兩個部分:第一,似乎大多數人 - 包括我自己 - 都有某種感覺,應該有一個更簡潔或創造性的方式來實現這一點。其次,根據我的經驗,嘗試更具創造性的解決方案通常會增加混淆和混淆。 – phoog