加入一对多,返回的最小值大于结果



我知道标题很复杂,但情况如下:

我有一张这样的用户表:

id     opened_at                
32o   2/01/2018 00:00:00       

用户组表如下:

user_id     group_id
32o         29834jb

还有一整张这样的小组表:

group_id               group_ended_at
29834jb               1/14/2018 00:00:00
29834jb               2/14/2018 00:00:00
29834jb               3/14/2018 00:00:00
29834jb               4/14/2018 00:00:00

我想加入用户的组,但只返回最小group_ended_at,该值大于用户的opened_at日期

换句话说,我想要这个结果:

id           opened_at              group_id              group_ended_at
32o         2/01/2018 00:00:00       29834jb            2/14/2018 00:00:00

我该怎么做?

我们可以在您的尝试基础上进行构建:只需将日期不等式条件添加到联接条件中,定义适当的group by子句,您就可以在这里:

SELECT u.id, u.opened_at, u.group_id, MIN(g.group_ended_at)
FROM users u
LEFT JOIN groups g
ON  u.group_id = g.group_id
AND g.group_ended_at > u.opened_at
GROUP BY u.id, u.opened_at, u.group_id

这回答了最初提出的问题。

我喜欢这个的横向连接:

SELECT u.*, g.group_ended_at
FROM users u LEFT JOIN LATERAL
(SELECT MIN(g.group_ended_at) as group_ended_at
FROM groups g
WHERE u.group_id = g.group_id AND g.group_ended_at > u.opened_at
) g;

最新更新