试着想一想如何概括我的问题,却想不出什么(也许是为什么谷歌搜索还没有提供解决方案)。
所以我根据USERS表和COMMENTS表提出我的问题,我想为每个用户 获取最新的COMMENT 。
用户
| ID | NAME |
-------------
| 01 | BOB |
-------------
| 02 | JEN |
-------------
评论
| EMP_ID | UPDATED |
-----------------------
| 01 | 12/05/2011 | <== I WANT THIS
-----------------------
| 01 | 11/29/2011 |
-----------------------
| 02 | 12/01/2011 | <== ...AND THIS
-----------------------
| 02 | 11/27/2011 |
我尝试过这样的事情......
select e.date from USERS u
join EMPLOYEES e on e.emp_id=u.id
where emp_id in (select emp_id from TIMESHEETS where emp_id=u.id order by date fetch first 1 row only)
......它有效,但速度非常慢。
(我们正在使用DB2,因此我可以使用Common Tables)
答案 0 :(得分:1)
select u.name
, u.id
, c.text
, c.updated
from users u
left
join ( select cm.emp_id
, max(cm.updated) mostRecentCommentDate
from comments cm
group
by cm.emp_id ) recentComments
on recentComments.emp_id = u.id
left
join comments c
on c.emp_id = u.id
and c.updated = recentComments.mostRecentCommentDate
此处存在的一个潜在问题是,当用户在最近的评论当天有多个评论时。它可以解决,但您需要提供如何确定所需行的标准。上述查询将为最近评论日期的每条评论添加一行。太糟糕了,它不是日期时间字段......
答案 1 :(得分:0)
再次感谢Chris - 我考虑过你的方法,但最后我再次看到了我在原始SQL中所采用的方法。我在问题中包含的SQL大大简化了。实际上我有三个连接和相当大的where子句。
我发现相关的子查询方法实际上非常快,当我小心我的where子句时,当我确定子查询与外部查询相关的位置时,它在结果集上做了很多通过过滤减少。