从连接3个表中检索最后一条评论

时间:2013-07-05 10:55:20

标签: sql sql-server-2008

有下表示例:

JOBS    
   jobid 
   jobname

COMMENTS  
   jobid 
   userid 
   comment 
   date

USERS   
   userid 
   name

我需要从每个jobid中检索最后一条评论 到目前为止,我一直在尝试区别但是没有运气。 jobid可以在评论表中多次(多个评论等)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用ROW_NUMBER()选择每个jobid的最后一条评论:

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()函数根据某些条件为每一行分配一个数字,PARTITION BY部分中每个项目的编号从1开始,当然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

答案 2 :(得分:0)

我建议添加一个COMMENTS.ID。

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

另外你可以

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

然后您可以将上述视图加入到您的COMMENTS表中以查找最大日期。您需要在COMMENTS.DATE上添加时间戳。

Ť