具有如下表实例检索最新的留言:从加入3个表
JOBS
jobid
jobname
COMMENTS
jobid
userid
comment
date
USERS
userid
name
我需要检索的最后一个注释每个作业ID 我一直到目前为止,不同等,但没有运气。 jobid可以多次在评论表(多个评论等)
具有如下表实例检索最新的留言:从加入3个表
JOBS
jobid
jobname
COMMENTS
jobid
userid
comment
date
USERS
userid
name
我需要检索的最后一个注释每个作业ID 我一直到目前为止,不同等,但没有运气。 jobid可以多次在评论表(多个评论等)
只要从评论和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
您可以使用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
我会建议增加一个COMMENTS.ID。
然后看看COMMENTS.ID的最大值。
Alternatly你可以
SELECT JOBID, MAX(DATE) FROM COMMENTS GROUP BY JOBID
然后,你可以加入上述观点您的意见表,以查找最大日期。您需要在COMMENTS.DATE上添加时间戳。
牛逼
非常感谢所有的答复,现在看到这个太晚了:P我结束了“发现” OUTER APPLY(SELECT ...)选择一个行,我需要。 – MikaelMadrid