【问题标题】:MS Access queries to select latest dates onlyMS Access 查询仅选择最新日期
【发布时间】:2016-06-14 07:51:35
【问题描述】:

我有一个包含 2 个表的数据库,我正在尝试构建一个简单的查询来返回每个项目的最新成本。

示例:

ID、姓名、费用、生效日期

1...项目1...5...7/1/16

2...项目 1...4...6/1/16

3...Item2...6...8/1/16

4...项目1...2...9/1/16

应该只返回第 3 行(Item2)和第 4 行(Item1 的最新)。

使用 Access 界面,只有在我完全不包含成本的情况下,我才设法让它工作,而且我无法从 GROUP BY 行中删除成本,而不会让 Access 吓坏。任何帮助表示赞赏!

SQL 视图:

SELECT Item.Item_ID, Item.Item_Name, Rate_Changes.Cost, Max(Rate_Changes.Effective_Date) As MaxOfEffective_Date
FROM Item INNER JOIN Rate_Changes ON Item.Item_ID = Rate_Changes.Item_ID
WHERE Item.Active=True
GROUP BY Item.Item_ID, Item.Active, Item.Item_Name,
Rate_Changes.Cost, Rate_Changes.Effective_Date

【问题讨论】:

    标签: ms-access ms-access-2010


    【解决方案1】:

    这是一种方法:

    SELECT i.Item_ID, i.Item_Name, rc.Cost, rc.Effective_Date
    FROM Item as i INNER JOIN
         Rate_Changes as rc
         ON i.Item_ID = rc.Item_ID
    WHERE i.Active = True AND
          rc.Effective_Date = (SELECT MAX(rc2.Effective_Date)
                               FROM Rate_Changes as rc2
                               WHERE rc2.Item_Id = i.Item_id
                              );
    

    这假定给定项目没有重复的生效日期。

    编辑:

    如果你确实有重复,你可以这样做:

    SELECT i.Item_ID, i.Item_Name, rc.Cost, rc.Effective_Date
    FROM Item as i INNER JOIN
         Rate_Changes as rc
         ON i.Item_ID = rc.Item_ID
    WHERE i.Active = True AND
          rc.Effective_Date = (SELECT TOP 1 rc2.Effective_Date
                               FROM Rate_Changes as rc2
                               WHERE rc2.Item_Id = i.Item_id
                               ORDER BY rc2.Effective_Date DESC, rc2.id DESC
                              );
    

    【讨论】:

    • 从我有限的样本数据来看,这很好用,谢谢!我很确定给定项目不应该有重复的生效日期 - 有什么办法可以强制执行吗?我几乎是全新的访问,所以我还在摸索命令。
    • @rgdhndho 。 . .如果id 随日期增加,那么您可以使用id 而不是effective_date
    • ID是主键,所以肯定是唯一的。但是,我不太确定您的意思;我想让查询显示每个项目 ID 的最新价格(最大生效日期)。如何使用 ID(Rate_Change 表的主键)进行分组?我尝试了您的替代代码,结果显示查询最多返回一个结果的警告。我只是将 Order By rc.Item_ID 扔到最后,据我所知,它工作正常。感谢您的建议!
    • ID是主键,所以肯定是唯一的。但是,我不太确定您的意思;我想让查询显示每个项目 ID 的最新价格(最大生效日期)。如何使用 ID(Rate_Change 表的主键)进行分组?我尝试了您的替代代码,结果显示查询最多返回一个结果的警告。我只是将 Order By rc.Item_ID 扔到最后,据我所知,它工作正常。感谢您的建议!
    • 即使有重复,编辑后的版本也应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多