有2个表,用户和job_experiences。
我想返回所有job_experience的列表,除了与每个用户关联的第一个。
用户
123job_experiences
id | start_date | …
使用 row_number() 窗口功能
row_number()
with cte as ( select e.*, row_number()over(partition by user_id order by start_date desc) rn, count(*) over(partition by user_id) cnt from users u join job_experiences e on u.id=e.user_id ) , cte2 as ( select * from cte ) select * from cte2 t1 where rn<=(select max(cnt)-1 from cte2 t2 where t1.user_id=t2.user_id)
您可以使用中间CTE获得第一个( MIN )每个用户的作业,然后使用它来确定要排除的记录:
MIN
WITH user_first_je("user_id", "job_id") AS ( SELECT "user_id", MIN("id") FROM job_experiences GROUP BY "user_id" ) SELECT job_experiences.* FROM job_experiences LEFT JOIN user_first_je ON user_first_je.job_id = job_experiences.id WHERE user_first_je.job_id IS NULL;