我有一个表,其中包含已在我们的CRM系统中合并的客户ID的历史记录。历史报告Oracle模式中的数据与创建交互记录时的数据一样存在。我需要一种方法来从潜在的旧ID中找到与客户关联的当前ID。为了让这更有趣,我没有为此创建PL/SQL的权限,我只能根据此数据创建Select语句。
客户ID_MERGE_HIST表中的样本数据
| OLD_ID | NEW_ID |
+----------+----------+
| 44678368 | 47306920 |
| 47306920 | 48352231 |
| 48352231 | 48780326 |
| 48780326 | 50044190 |
样本交互表
| INTERACTION_ID | CUST_ID |
+----------------+----------+
| 1 | 44678368 |
| 2 | 48352231 |
| 3 | 80044190 |
我想要一个带有递归子查询的查询,以提供如下结果集:
| INTERACTION_ID | CUST_ID | CUR_CUST_ID |
+----------------+----------+-------------+
| 1 | 44678368 | 50044190 |
| 2 | 48352231 | 50044190 |
| 3 | 80044190 | 80044190 |
注意:Cust_ID 80044190从未合并过,因此不会出现在ID_MERGE_HIST表中
如有任何帮助,我们将不胜感激。
您可以查看CONNECT BY构造。
此外,您可能想玩递归with(其中一个描述:http://gennick.com/database/understanding-the-with-clause)。CONNECT BY更好,但ORACLE专用。
如果这是一个频繁的请求,您可能需要为所有相关记录存储第一个/最后一个cust_id。
第一个cust_id-将是静态的,但需要两次跳跃才能到达当前的一个
Last cust_id-将立即为您提供结果,但需要对每个新记录的整个树进行更新