【问题标题】:SQL query search by ID and get another attribute of the recordSQL查询按ID搜索并获取记录的另一个属性
【发布时间】:2018-11-21 05:48:12
【问题描述】:

我正在开发一个需要搜索 MAX(ID) 的数据库,其中 ID 是一个自动编号(基本上是最近的记录/最后一条记录),然后在找到时我想获取收据编号。例如

收据表

ID         DATE        Number
2          ###          1423
3          ###          1452
4          ###          1401

我目前正在检索 Max(Number),但由于程序要求,最近的并不总是最高的。所以我想检索最高的 ID 值,然后让 Number 的值增加。我尝试了嵌套查询,但没有结果。虽然我对 VBA 很熟悉,但我对复杂的查询和优化不太擅长。

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

    您可以使用DMax 从表中获取最大的ID 值。例如,在立即窗口中...

    ? DMax("ID", "YourTable")
    

    您可以在查询中使用该表达式来请求具有最高 ID 值的行。

    SELECT y.ID, y.DATE, y.Number
    FROM YourTable AS y
    WHERE y.ID=DMax('ID', 'YourTable');
    

    DMax 是特定于访问权限的。如果您想要一种可移植到其他数据库的方法,您可以使用子查询来检索最高的 ID 值。

    SELECT y.ID, y.DATE, y.Number
    FROM YourTable AS y
    WHERE y.ID=(SELECT Max(ID) FROM YourTable);
    

    【讨论】:

    • 我可以使用 DMax,但是它返回 ID 而不是 Number 的值,而且我认为你不能在 WHERE 谓词中使用 Max 和 DMax,这就是造成困境的原因。
    • 我在 Access 2007 中使用您的示例数据创建并测试了这两个查询,并且都按预期返回了 ID = 4 的行。如果您只想在结果集中查看 Number,请仅选择该字段:SELECT y.Number FROM YourTable AS y WHERE y.ID=DMax('ID', 'YourTable');
    猜你喜欢
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    相关资源
    最近更新 更多