Access 2010从链接表返回最近的记录

时间:2015-04-28 15:29:02

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

我使用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'列出每个单独的项目,'comments'存储注释。我正在尝试构建一个报告,列出“项目”中的每个单独记录以及与“项目”相关的最新评论,其中包括以下内容:

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和comments.commentdt之外的任何其他字段时,会出错。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

SELECT您希望从项目创建的字段,并使用相关子查询从每个项目的最新评论中获取文本。

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;

我不知道 comments 是否允许 commentdt 重复使用相同的 wonum 。所以我将c.commentid DESC添加到ORDER BY服务器作为TOP 1的平局,以防可能存在重复项。但是,如果您对 wonum commentdt 的组合有唯一约束,则可以只使用ORDER BY c.commentdt DESC

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