2015-04-28 271 views
1

我使用訪問跟蹤項目最新記錄兩個表:Access 2010的回報率從鏈接表

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) 
); 

「項目」列表中每一個項目和「評論」商店的意見。我試圖建立一個報告與最近從「意見」該項目相關的註釋一起列出了從「項目」每個人的記錄,沿着線:

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

我已經嘗試了數來自'網絡的不同連接和子查詢。這似乎是一個有前途的:

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包括任何其他領域的一邊。

回答

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; 

我不知道評論是否允許commentdt的重複對同一wonum。所以我加c.commentid DESCORDER BY到服務器作爲TOP 1的決勝者,以防可能有重複。但是,如果你有wonumcommentdt的組合,唯一約束,你可以只使用ORDER BY c.commentdt DESC

添加上comments.wonumcomments.commentdt如果他們不已經收錄索引。

+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