连接到具有多行的表,用于连接项

Dom*_*ger 1 sql t-sql sql-server

我有一个表users,其中包含主键userid和日期时间列pay_date.

我还有一个通过列user_actions引用的表和一个datetime列.usersuseridaction_date

我想将两个表连接在一起,只从user_actions表中获取最早的动作,该动作具有action_date晚于或等于pay_date.

我正在尝试这样的事情:

select users.userid from users
left join user_actions on user_actions.userid = users.userid
where user_actions.action_date >= users.pay_date
order by user_actions.pay_date
Run Code Online (Sandbox Code Playgroud)

但显然每个用户返回多行(一个用于每个用户操作发生在或之后pay_date).不知道从哪里开始?

抱歉可能看起来像一个简单的问题,我对t-sql相当新.

A-K*_*A-K 5

CROSS APPLY是你的朋友:

select users.*, t.* from users
CROSS APPLY(SELECT TOP 1 * FROM user_actions WHERE user_actions.userid = users.userid
AND user_actions.action_date >= users.pay_date
order by user_actions.pay_date) AS t
Run Code Online (Sandbox Code Playgroud)