我有多个表。表1包含人员的IIN(唯一标识号)。表2包含IIN和person_id。表3包含table3_id,person_id,addr_id,date_reg。表4包含addr_id和其他列。我需要删除table1.iin,table3.date_reg,以及表4为表1中的每个IIN所包含的所有列。问题是表2和表3之间的关系是一对多。因此,对于每个IIN,我们有多个表3_id的。我只需要连接到具有最大table 3_id的记录。我如何才能做到这一点?我使用oracle sql
thanks in advance
表1:
| IIN|
| --|
| 0101 |
| 0201 |
| 0301 |
| 0401 |
表2:
| 个人ID| IIN|
| --|--|
| 1 | 0101 |
| 2 | 0201 |
| 3 | 0301 |
| 4 | 0401 |
表3:
| ID|个人ID| id_address| date_reg|
| --|--|--|--|
| 1 | 2 | 12 |2022年06月02日|
| 2 | 2 | 23 |2012年3月6日|
| 3 | 1 | 34 |2015年05月07日|
| 4 | 3 | 45 |2020年05月30日|
| 5 | 3 | 56 |2022年06月12日|
| 6 | 3 | 67 |2020年10月07日|
表4:
| ID|其他属性|
| --|--|
| 12 ||
| 23 ||
| 34 ||
| 45 ||
| 56 ||
| 67 ||
测试结果:
| IIN| date_reg| id_address|表4中的其他属性|
| --|--|--|--|
| 0101 |2015年05月07日| 34 ||
| 0201 |2012年3月6日| 23 ||
| 0301 |2020年10月07日| 67 ||
| 0401 ||||
select table1.iin, table4.rka, table4.street, table4.house,
table3.date_reg from table1
left join table2 on table2.iin=table1.iin
left join table3 on table2.person_id=table3.person_id
left join table4 on table3.id_addr=table4.id
字符串
2条答案
按热度按时间qv7cva1a1#
在主查询中应用子查询可以实现您的结果。
SQL示例
字符串
7xzttuei2#
有很多方法可以实现这一点。毕竟,这是所有关于表3和获取其行与最大日期每人。
字符串
表3的
ON
子句。我更喜欢的是一个CTE(又名
WITH
子句)获取表的顶部3行并使用它们:型
那么,这个CTE是如何工作的呢?我们给每个人的每一行编号,从最新的日期开始编号,从倒数第二个日期开始编号,以此类推。然后我们按照这些编号对行进行排序,首先获得与所有编号为#1的想要的行的关系。然后我们说我们想要第一行及其所有关系,即所有最新的行,每个人一个。