【问题标题】:Access 2010 return most recent record from a linked tableAccess 2010 从链接表返回最新记录
【发布时间】:2015-07-07 13:12:22
【问题描述】:

我正在使用带有两个表的 Access 跟踪项目:

CREATE TABLE projects
(
wonum varchar(10) NOT NULL PRIMARY KEY,
description varchar(255),
location varchar(16),
status varchar(10),
owner varchar(24),
);

CREATE TABLE comments
(
commentid AUTONUMBER NOT NULL PRIMARY KEY,
wonum varchar(10) NOT NULL,
commentdt DATETIME,
commenttext varchar(255),
FOREIGN KEY (wonum) REFERENCES projects(wonum)
);

'projects' 列出每个单独的项目,'cmets' 存储 cmets。我正在尝试构建一个报告,列出“项目”中的每条记录以及“cmets”中与该项目相关的最新评论,大致如下:

QueryResultSet
    project.wonum
    project.description
    project.location
    project.status
    project.owner
    comments.commenttext /*most recent comment*/

我尝试了许多来自 'net.这个看起来很有希望:

SELECT projects.wonum, max(comments.commentdt) AS lastdate
FROM projects INNER JOIN comments ON projects.wonum=comments.wonum
GROUP BY projects.wonum

这会返回我期望的结果,但是当我尝试包含除 projects.wonum 和 cmets.commentdt 之外的任何其他字段时,会出现 Access 错误。

【问题讨论】:

    标签: sql ms-access ms-access-2010


    【解决方案1】:

    一种方法是使用相关子查询来获取每个项目的最大评论数:

    SELECT c.*
    FROM projects as p INNER JOIN
         comments as c
         ON p.wonum = c.wonum
    WHERE c.commentdt = (SELECT MAX(commentdt)
                         FROM comments as c2
                         WHERE c2.wonum = c.wonum
                        )
    GROUP BY c.wonum
    

    【讨论】:

      【解决方案2】:

      SELECTprojects 中您想要的字段,并使用相关子查询从每个项目的最新评论中获取文本。

      SELECT
          p.wonum,
          p.description,
          p.location,
          p.status,
          p.owner,
          (
              SELECT TOP 1 c.Commenttext
              FROM comments AS c
              WHERE c.wonum = p.wonum
              ORDER BY c.commentdt DESC, c.commentid DESC
          ) AS most_recent_comment
      FROM projects AS p;
      

      我不知道 cmets 是否允许对同一个 wonum 重复 commentdt。所以我将c.commentid DESC 添加到ORDER BY 到服务器作为TOP 1 的决胜局,以防有重复。但是如果你对 wonumcommentdt 的组合有唯一的限制,你可以只使用ORDER BY c.commentdt DESC

      cmets.wonumcmets.commentdt 上添加索引(如果它们尚未编入索引)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-14
        • 1970-01-01
        • 2012-03-11
        相关资源
        最近更新 更多