应用场景
使用left join时,左表为主要表格,从右表中获取一列数据作为辅助注释,然而右表中存在多条,如何取其中1条作为想要的数据。
代码
错误情况:
select l.*,r.辅助注释 from left_table l left join right_table r on l.关联列名 = r.关联列名
该中情况中由于右表right_table存在重复数据,故导致结果重复。
正确情况,应先对右表中数据进行筛选:
select 关联列,辅助注释列,row_number() over (partition by 关联列 order by 日期 desc) as rownum from 右表
相当于将右表中的数据,按照“关联列”分组,按照“日期”排序,然后新增了一列“rownum”,数值为每一个分组中的序号1,2,3等。
关联列 | 辅助注释列 | rownum |
---|---|---|
aaa | 孙悟空11 | 1 |
aaa | 孙悟空2222 | 2 |
aaa | 孙悟空33 | 3 |
bbb | 唐僧 | 1 |
bbb | 假唐僧 | 2 |
最终代码:
select l.*,r.辅助注释 from left_table l left join
(select * from
(select 辅助注释列,关联列,row_number() over (partition by 关联列 order by 日期 desc) as rownum from 右表)
where rownum = 1 ) r
on l.关联列名 = r.关联列名
取最新日期的辅助注释列内容,作为左表的补充。