加入包含多个记录的第二个表,采取最新的记录

giò*_*giò 3 sql group-by left-join greatest-n-per-group amazon-redshift

我有两张桌子:

person_id | name
1            name1
2            name2
3            name3
Run Code Online (Sandbox Code Playgroud)

和第二个表:

person_id | date     | balance
1           2016-03     1200                    ---- \
1           2016-04     700                     ----  > same person
1           2016-05     400                     ---- /
3           2016-05     4000
Run Code Online (Sandbox Code Playgroud)

考虑到person_id 1在第二个表上有三个记录,我如何才能加入第一个记录?(即:余额400,对应日期:2016-05).

例如:查询输出:

person_id | name    | balance
1           name1     400
2           name2     ---
3           name3     4000
Run Code Online (Sandbox Code Playgroud)

如果它可能更喜欢简单而不是解决方案的复杂性

jue*_*n d 5

适用于所有数据库引擎的查询是

select t1.name, t2.person_id, t2.balance
from table1 t1
join table2 t2 on t1.person_id = t2.person_id
join
(
    select person_id, max(date) as mdate
    from table2
    group by person_id
) t3 on t2.person_id = t3.person_id and t2.date = t3.mdate
Run Code Online (Sandbox Code Playgroud)