【问题标题】:MS Access select the most recent date for each GroupIDMS Access 为每个 GroupID 选择最近的日期
【发布时间】:2016-05-12 09:40:48
【问题描述】:

我有三个 MS Access 表,tblGroup、tblItem、tblStatus:

[tblItem]
ItemID
ItemName
ItemDate
GroupID
StatusID

[tblGroup]
GroupName
StatusID

[tblStatus]
StatusID
StatusName

我正在尝试编写一个 VBA SQL 查询来选择 tblItem 中具有最新日期(即 Max(ItemDate))的所有行,其中每个 GroupID 的 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

任何帮助将不胜感激!

乔治

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

    如果我理解正确,那么这几乎是您要求的直接翻译:

    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;
    

    这些版本并不完全相同。如果项目的跨组日期存在关联,则第一个可能不起作用。这解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      相关资源
      最近更新 更多