2016-05-12 17 views
0

のための最新の日付を選択しtblGroup、tblItem、tblStatus:MS Accessの、私は3つのMS Accessのテーブルを持って、各グループID

[tblItem] 
ItemID 
ItemName 
ItemDate 
GroupID 
StatusID 

[tblGroup] 
GroupName 
StatusID 

[tblStatus] 
StatusID 
StatusName 

私はtblItemのすべての行を選択するために、VBA SQLクエリを記述しようとしていますtblGroupのStatusIDが「1」である各GroupIDの最新の日付(すなわち、Max(ItemDate))。

私は以下のバリエーションを試していますが、他のテーブル、つまり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; 

これらのバージョンは正確ではありません同じ。 1つのアイテムのグループ間の日付の結びつきがある場合、最初のアイテムは機能しない可能性があります。この問題は修正されました。

関連する問題