2013-07-05 44 views
0

具有如下表实例检索最新的留言:从加入3个表

JOBS  
    jobid 
    jobname 

COMMENTS 
    jobid 
    userid 
    comment 
    date 

USERS 
    userid 
    name 

我需要检索的最后一个注释每个作业ID 我一直到目前为止,不同等,但没有运气。 jobid可以多次在评论表(多个评论等)

回答

0

只要从评论和jobID日期是唯一的,这将工作正常。如果没有,那么这个答案会给你最近的评论,包括关系。

select comment, jobid 
from (select max(date) as MaxDate, jobid from comments group by jobid) x 
inner join comments c 
on c.jobid = x.jobid 
and c.date = x.MaxDate 
+0

非常感谢所有的答复,现在看到这个太晚了:P我结束了“发现” OUTER APPLY(SELECT ...)选择一个行,我需要。 – MikaelMadrid

0

您可以使用ROW_NUMBER()来选择每个作业ID最后一个注释:

SELECT jobid, userid, comment, date 
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY jobid ORDER BY date DESC)'RowRank' 
     FROM COMMENTS 
    )sub 
WHERE RowRank = 1 

的ROW_NUMBER()函数分配一个编号,根据某些标准的每一行,编号从1开始PARTITION BY部分中的每个项目,当然还有ORDER BY确定顺序。使用ROW_NUMBER()的优势在于,您不需要像使用MAX()那样进行自我连接。

然后,如果您想加入到其他表得到的所有信息:

SELECT c.jobid, j.jobname, c.userid, u.username, c.comment, c.date 
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY jobid ORDER BY date DESC)'RowRank' 
     FROM COMMENTS 
    ) c 
JOIN jobs j 
    ON c.jobid = j.jobid 
JOIN users u 
    ON c.userid = u.userid 
WHERE c.RowRank = 1 
0

我会建议增加一个COMMENTS.ID。

然后看看COMMENTS.ID的最大值。

Alternatly你可以

SELECT JOBID, MAX(DATE) FROM COMMENTS GROUP BY JOBID 

然后,你可以加入上述观点您的意见表,以查找最大日期。您需要在COMMENTS.DATE上添加时间戳。

牛逼