Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择SQL联接中第二个表的顶行_Sql_Join - Fatal编程技术网

选择SQL联接中第二个表的顶行

选择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

我必须创建名为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 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