在访问查询中仅显示具有特定字段数据的最后一条记录

Posted

技术标签:

【中文标题】在访问查询中仅显示具有特定字段数据的最后一条记录【英文标题】:Show only last record with specific field data in access query 【发布时间】:2016-12-06 20:45:01 【问题描述】:

我的 SQL 技能非常基础,但我正在尝试为一家小型企业设置一个非营利性数据库。 我有一个包含财务数据的表 (extract_financial):

regno (organisation registration number, unique),
fystart (date, financial year start),
fyend (date, financial year end),
income,
exped (expenditure).

每个组织都会有一些不同财政年度的记录。并非所有记录都包含收入和支出值。

我只想显示每个组织的一条记录(包括 regno、fyend、income),即最近有任何收入的记录。

我尝试了以下脚本,改编自一个类似的问题,但它不起作用:

SELECT ef.regno, ef.fyend, ef.income  
FROM extract_financial ef  
    INNER JOIN  
    (  
        SELECT regno, Max(fyend) AS MaxOfFyend  
        FROM extract_financial  
        GROUP BY regno  
    ) AS efx  
        ON ef.regno = efx.regno   
            AND ef.fyend = efx.MaxOfFyend  
WHERE ef.income IS NOT NULL  

查找每个 [regno] 的最新条目的查询有效,但问题是最新记录中从来没有任何收入......所以我想我需要一个 IF THEN?

非常感谢您的帮助,谢谢!

【问题讨论】:

【参考方案1】:

你很接近。 WHERE 子句需要进入子查询:

SELECT ef.regno, ef.fyend, ef.income  
FROM extract_financial as ef INNER JOIN  
     (SELECT regno, Max(fyend) AS MaxOfFyend  
      FROM extract_financial as ef
      WHERE ef.income IS NOT NULL
      GROUP BY regno  
     ) AS efx  
     ON ef.regno = efx.regno AND ef.fyend = efx.MaxOfFyend;

【讨论】:

感谢 Gordon,并为迟到的回复道歉。在尝试此脚本时,系统会要求我为 ef.income 和 ef.MaxOfFyend 输入一个参数。有什么想法吗? 编辑后现在开始工作 - 非常感谢@Gordon 的帮助!

以上是关于在访问查询中仅显示具有特定字段数据的最后一条记录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 在 MySQL 表中仅搜索一条特定记录

在提取数据库中重复行的查询结果中仅选择较新的记录

DB2 和 SQL-如何在特定字段中返回最大值,以便每行只显示一条记录;从多个表中提取数据

MS Access 查询:合并特定字段列中具有相同数据的行

数据库中如何查询表的最后一条记录?

如何在时间戳字段中仅使用日期来选择记录?