【问题标题】:Access Select Max date with corresponding records使用相应记录访问选择最大日期
【发布时间】:2018-11-09 13:55:42
【问题描述】:

我正在尝试创建一个查看最近日期并返回相应值的查询。仅当我有 hose part nomax inspection 列而没有其他内容时,使用 max 函数才有效。一旦我添加了scrap amount 列,它就会复制hose part no 列。我只希望每个软管零件号有一条记录。

下面是一个例子:

Hose Part No Max Inspection Date scrapamt1 scrapamt2 scrapamt3 scrapamt4

【问题讨论】:

  • NewScrapTbletblReleaseNo 如何链接。该图像仅显示一张桌子。当scrapamt2 - 4 将多条记录合二为一时,您希望它发生什么?
  • 我通过关系设置表,其中主键是版本号。图片是查询结果。我想要的软管零件号与当天的报废量有最新记录。这是一个示例软管零件号 MaxOfInspect 日期 scrapamnt1 2807-10 5/23/2017 60 2807-12 6/16/2017 12 2807-12T 1/13/2017 80 2807-20 11/27/2017 1
  • 所以scrapamt1 for 2807-12T01/13/2017 将是130 - 即120+10。您能否向我们展示这两个表的设计 - 目前您只向我们展示您的查询结果,这并没有多大帮助 - 除非您提到它,否则我只会说将您的非计算字段分组.
  • 您可以使用标签下方的编辑按钮将额外信息编辑到您的问题中。
  • 抱歉,我指的是两个表中出现的数据。我很惊讶Release No 是两个表中的 PK - 表明两个表可以合并。

标签: ms-access ms-access-2010


【解决方案1】:

如果我理解你的正确,这就是你想要的:

Select * From Table1 Inner Join
(Select Table1.[Hose Part No], Max(Table1.[Max Inspection Date]) As [MaxOfMax Inspection Date] From Table1 Group By Table1.[Hose Part No]) As MaxValues
On Table1.[Hose Part No] = MaxValues.[Hose Part No] And Table1.[Max Inspection Date] = MaxValues.[MaxOfMax Inspection Date]

子查询(名为 MaxValues)用于确定每个 Hose Part No 的最大 Max Inspection Date,并将连接到同一个表。

因为你也没有提到表名,所以我选择了Table1

【讨论】:

  • 我很抱歉。检验日期和报废量来自表 NewScrapTble,软管部件号来自 tblReleaseNo
  • 而截图是查询的结果?请展示两张桌子的确切设计。
  • 我不确定如何在此评论部分发布屏幕截图。对不起,我是这个页面的新手。
【解决方案2】:

这似乎有效 -

tblReleaseNo:

| Release No | Hose Part No | Release Date | Due Date   |
|------------|--------------|--------------|------------|
| 1          | Hose 1       | 01/01/2018   | 01/01/2018 |
| 2          | Hose 1       | 01/01/2018   | 01/01/2018 |
| 3          | Hose 2       | 01/01/2018   | 01/01/2018 |
| 4          | Hose 2       | 01/01/2018   | 01/01/2018 |
| 5          | Hose 3       | 01/01/2018   | 01/01/2018 |  

NewScrapTble:

| Release No | Inspect Date | scrapamt1 | reason1 | scrapamt2 |
|------------|--------------|-----------|---------|-----------|
| 1          | 01/12/2018   | 10        |         | 15        |
| 2          | 12/12/2018   | 15        |         | 18        |
| 3          | 01/07/2018   | 12        |         | 12        |
| 4          | 01/08/2018   | 14        |         | 200       |
| 5          | 01/03/2017   | 22        |         | 20        |  

SQL:

SELECT  [Hose Part No]
        , MAX([Inspect Date]) AS Inspect
        , LAST(scrapamt1) AS Amount1
        , LAST(scrapamt2) AS Amount2
FROM    (
        SELECT  [Hose Part No]
                , [Inspect Date]
                , scrapamt1
                , scrapamt2
        FROM    tblReleaseNo INNER JOIN NewScrapTble ON 
                    tblReleaseNo.[Release No] = NewScrapTble.[Release No]
        )
GROUP BY [Hose Part No]  

决赛桌:

| Hose Part No | Inspect    | Amount1 | Amount2 |
|--------------|------------|---------|---------|
| Hose 1       | 12/12/2018 | 15      | 18      |
| Hose 2       | 01/08/2018 | 14      | 200     |
| Hose 3       | 01/03/2017 | 22      | 20      |  

注意:我不能 100% 确定 LAST 是正确的,它正在提取正确的金额,但不确定它是否会在某些记录上出错?

【讨论】:

  • 我试过了,但由于某种原因,它没有提取正确的数量。
  • 您马上就会生气 - 您能否将数据表粘贴为我可以从中复制的表格而不是图像,以便我可以使用您的数据进行测试。这个link 提供了一种快速格式化表格的方法 - 只需将它们粘贴到您的问题中并格式化为代码。
  • Release No 值在两个屏幕截图中不同,因此它不会拉任何东西 - 它使用它们将两个表链接在一起。
  • 说当我更新Release No 时,我确实得到了数据——你是对的,它返回的废料数量不正确。您还获得了同一天的多个报废金额,使多个记录成为最近日期 - 您希望在那里发生什么?
猜你喜欢
  • 2018-04-20
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多