2016-05-12 98 views
0

我有三個MS Access表,tblGroup,tblItem,tblStatus:MS訪問選擇最近的日期爲每個羣ID

[tblItem] 
ItemID 
ItemName 
ItemDate 
GroupID 
StatusID 

[tblGroup] 
GroupName 
StatusID 

[tblStatus] 
StatusID 
StatusName 

我試圖寫一個VBA SQL查詢來選擇tblItem與所有行對於每個GroupID的最近日期(即Max(ItemDate)),其中tblGroup的StatusID等於「1」。

我一直在嘗試下列變化(見下文),但我不明白如何根據另一個表格過濾結果,即tblGroup的StatusID在另一個表格中等於「1」。

DoCmd.OpenForm "frmItem" 
Forms!frmItem.frmItemSubform.Form.RecordSource = "SELECT tblItem.ItemID, Max(tblItem.ItemDate) FROM tblItem GROUP BY tblItem.ItemID, tblItem.ItemDate" 
Forms!frmItem.frmItemSubform.Requery 

任何幫助將不勝感激!

喬治

回答

3

如果我理解正確,那麼這幾乎是你的要求直接翻譯:

select i.* 
from tblItem as i 
where i.date = (select max(i2.date) 
       from tblItems as i2 inner join 
        tblGroup as g 
        on i2.GroupId = g.GroupId 
       where i2.GroupId = i.GroupId and g.StatusId = 1 
       ); 

,或者:

select i.* 
from tblItem as i inner join 
    (select i.GroupId, max(i2.date) as date 
     from tblItems as i2 inner join 
      tblGroup as g 
      on i2.GroupId = g.GroupId 
     where g.StatusId = 1 
     group by GroupId 
    ) gmax 
    on gmax.GroupId = i.GroupId and gmax.date = i2.date; 

這些版本是不完全相同。如果某個項目的組之間存在日期關係,則第一項可能無效。這解決了這個問題。