选择SQL联接中第二个表的顶行
我必须创建名为USERS和COMM_HISTORY的表 USERS表将有一个唯一的用户列表,COMM_历史记录可以有重复的user_id。当我加入他们时,我想从COMM_历史记录中获取用户名和最近的COMM_日期 类似于这篇文章,但似乎没有正确的答案 当我加入他们时,我想知道ff的结果选择SQL联接中第二个表的顶行,sql,join,Sql,Join,我必须创建名为USERS和COMM_HISTORY的表 USERS表将有一个唯一的用户列表,COMM_历史记录可以有重复的user_id。当我加入他们时,我想从COMM_历史记录中获取用户名和最近的COMM_日期 类似于这篇文章,但似乎没有正确的答案 当我加入他们时,我想知道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 D
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
有人对此有解决办法吗?@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
将历史记录表连接回自身,并设置一个条件,说明不应选择以后的历史记录行。使用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 What数据库和哪个版本??SQL只是结构化查询语言-一种被许多数据库系统使用的语言-SQL不是数据库产品。。。像这样的东西通常是特定于供应商的-所以我们真的需要知道您使用的是什么数据库系统。。。。
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