我必须使用名为USERS
和COMM_HISTORY
的表
USERS(user_id, name)
COMM_HISTORY(comm_history_id, comm_date, comm_by, user_id)
USERS
表将具有唯一的用户列表,而COMM_HISTORY
可以具有重复的user_id
。当我加入他们的时候,我想从COMM_HISTORY
获取用户名和最新的comm_date
。
与这篇文章类似的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
有人有解决这个问题的办法吗?
发布于 2012-01-30 09:05:26
@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
将历史表重新连接到自身上,并设置一个条件,说明不应选择以后的历史记录行。
发布于 2012-01-30 09:39:50
一种使用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个。
https://stackoverflow.com/questions/9061344
复制相似问题