2011-09-14 165 views
8

使用MS Access。對不起,標題是模糊的 - 我只是不完全知道如何描述這是什麼類型的問題,我只知道我需要連接兩個表或查詢來解決它。訪問SQL連接問題

我有一個OrgHistory表,顯示該組織中的每個人(通過ID),加入了對某一特定日期(你只能一次一個組織的成員):

Person | Org | JoinDate 
----------------------- 
123 | abc | 3/2/2011 
456 | abc | 4/23/1925 
123 | def | 5/12/2011 

我也有一個Activities表:

Person | Activity | ActivityDate 
-------------------------------- 
123 | eat  | 3/23/2011 
123 | sleep | 6/25/2011 
456 | walk  | 7/20/1985 

我想找出,對於每個Activities記錄,其組織的人是對活動的日期一員。我想這可能涉及將JoinDate值轉換爲一組範圍,並將ActivityDate匹配到適當的時間間隔,但我對如何設計查詢在這種情況下有點困惑 - 如何創建範圍並匹配個人價值到一個範圍?

我不認爲partition()將工作,因爲我沒有試圖在已知數量的桶中保存多個JoinDate值。

+0

我同意你的'OrgHistory'表缺少'LeaveDate'屬性:您應該添加一個新的'LeaveDate'列到你的基表中,添加一個排序的關鍵字以確保句點不能重疊(同時提示:你需要一個'CHECK'約束),然後清理數據** **(@ Banjoe's查詢看起來很有希望)。 – onedaywhen

+0

+1 @onedaywhen - 使用休假日期而不是活動/無效布爾值。許多人不認爲必須歷史迴歸才能找到會員。 – JeffO

回答

5

我不能保證這是最有效的方式,但它與您所提供的測試數據訪問的工作原理:

SELECT a.person, a.activity, 
     (
     SELECT TOP 1 org 
      FROM orghistory AS o 
     WHERE o.person = a.person 
       AND o.joindate <= a.activitydate 
     ORDER 
      BY o.joindate DESC 
     ) AS Org 
    FROM activities AS a; 
+0

謝謝!關於取得<=活動日期的頂級會員資格日期的好主意,這很有意義。 – sigil