【问题标题】:MS Access most recent dateMS Access 最近日期
【发布时间】:2018-04-19 02:24:25
【问题描述】:

我是查询的新手,所以请耐心等待。我查看了其中一个已发布的主题,它几乎对我有用。我只需要能够多拉一个领域。

这是我的数据:

这就是我想要对数据做的事情。我想要每个项目和 XorZ 的最新数据。每个项目将有 2 行,一行带有 X,一行带有 Z。它们将显示最大日期,并返回该日期的值。

例子:

我尝试使用它,它有效。

SELECT Item, MAX(Date), XorZ
FROM MyTable
GROUP BY Item, XorZ
ORDER BY ITEM

一旦我尝试将 Value 添加到 Select 中,它就不起作用了。我得到“您的查询不包括指定的表达式‘值’作为聚合函数的一部分。然后,当我将值添加到“分组依据”时,数据输出不会只带回每个项目和 XorZ 的最新日期.

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    如果您需要与 item、XorZ 和 max_date 相关的值
    您应该使用 max_date 的子选择加入您的表

       SELECT Item, Date, XorZ, value 
       from MyTable
       INNER JOIN (
    
           SELECT Item, MAX(Date) max_date, XorZ
          FROM MyTable
          GROUP BY Item, XorZ
           ) t on t.max_date = MyTable.daye 
                and t.Item = MyTable.Item 
                 and t.XorZ = MyTable.XorZ
    

    【讨论】:

    • 对不起,我真的很陌生。你能向我解释一下 t.max_date 部分的 ) t 吗?这是别名或缩写吗?我在原始代码中看到了这一点,但无法弄清楚。它需要是 t 还是我可以选择的东西?
    • t 是子选择的别名。你可以随意命名它
    • 重新开始就可以了!不知道我做错了什么,但现在我可以看到正确的方法了。谢谢。
    • @MRiley .. t 是使用子查询创建的表的表名别名 .. 子查询返回与表结果集对应的结果 .. 并且可以使用此结果一个连接..这通常是表格相互关联的方式..希望这很清楚
    【解决方案2】:

    子选择它...

    SELECT xcurr.date
    , xcurr.Item
    , xcurr.XorZ
    , xval.value
    FROM MyTable xval INNER JOIN (
    SELECT Item, XorZ, MAX(Date) AS [date]
    FROM #MyTable 
    GROUP BY Item, XorZ, XorZ
    ) AS xcurr
    ON xcurr.Item = xval.Item 
    AND xcurr.XorZ = xval.XorZ
    AND xcurr.Date = xval.Date
    ORDER BY item, XorZ
    

    结果如下:

    尝试向表中添加主键。

    【讨论】:

    • 抱歉,我没有看到这会带来“价值”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多