2016-05-12 17 views
0

Ich habe drei MS Access-Tabellen, tblGroup, tblItem, tblStatus:MS Access wählen Sie das letzte Datum für jeden GroupID

[tblItem] 
ItemID 
ItemName 
ItemDate 
GroupID 
StatusID 

[tblGroup] 
GroupName 
StatusID 

[tblStatus] 
StatusID 
StatusName 

ich eine VBA SQL-Abfrage zu schreiben versuchen, alle Zeilen in tblItem mit der Auswahl das neueste Datum (dh Max (ItemDate)) für jede GroupID, wo die StatusID von tblGroup gleich "1" ist.

Ich habe versucht, Variationen der folgenden (siehe unten), aber ich verstehe nicht, wie die Ergebnisse basierend auf einer anderen Tabelle, d. H. Wo die StatusID von TblGroup gleich "1" in einer anderen Tabelle ist.

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 

Jede Hilfe wäre sehr geschätzt!

George

Antwort

3

Wenn ich richtig bin zu verstehen, dann ist dies fast eine direkte Übersetzung Ihrer Anforderungen:

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 
       ); 

Oder alternativ:

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; 

Diese Versionen sind nicht genau das gleich. Die erste funktioniert möglicherweise nicht, wenn für ein Element Termine für verschiedene Gruppen bestehen. Dies behebt dieses Problem.

Verwandte Themen