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相当新.
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)