我必须使用名为USERS
和COMM_HISTORY
USERS(user_id, name)
COMM_HISTORY(comm_history_id, comm_date, comm_by, user_id)
USERS
表将包含唯一的用户列表,COMM_HISTORY
可以包含user_id
的重复项。当我加入他们时,我想从comm_date
获取用户名和最新COMM_HISTORY
。
与此帖sql join - only select top row from 2nd table类似的内容,但似乎该帖子中没有正确答案。
我希望在加入时获得ff结果
1 John Doe 2012-01-29 Jane Doe
而不是
1 John Doe 2011-10-20 Jane Lee
2 John Doe 2012-01-29 Jane Doe
3 John Doe 2011-09-08 Jane Doe
任何人都有解决方案吗?
答案 0 :(得分:0)
@ Andomar在另一个问题上的解决方案应该有效。适应您的用例,它将是:
SELECT USERS.*, COMM_HISTORY.*
FROM USERS
INNER JOIN COMM_HISTORY
ON USERS.user_id = COMM_HISTORY.user_id
LEFT JOIN COMM_HISTORY LATER_HISTORY
ON COMM_HISTORY.user_id = LATER_HISTORY.user_id
AND LATER_HISTORY.comm_date > COMM_HISTORY.comm_date
WHERE LATER_HISTORY.user_id IS NULL
将历史记录表重新连接到自身,并设置一个条件,表示不应选择以后的历史记录行。
答案 1 :(得分:0)
使用cte的方法
with recent_comms as (
select
row_number() over (partition by user_id, order by comm_date decs) as rn,
comm_date,
comm_by,
user_id
FROM comm_history)
select
users.name,
recent_comms.comm_date,
recent_comms.comm_by
from users
join recent_comms on users.user_id = recent_comms.user_id
and recent_comms.rn = 1
例如,将rn = 1更改为rn< = 5将获得每个用户的最后5个。