我正在开发一个用于管理公司销售业务的应用程序。 他们的业务是多层的,意味着销售人员A由另一个销售人员B管理,而销售人员B又由另一个销售人员管理等等......
我可以设计一个带有parent_id列的表并使用CTE来解决问题。 然而,客户希望跟踪他们之间关系的变化。 例如,从2020年1月1日到2020年12月31日,A人由B人管理,但从2021年1月1日到现在,他/她由C人管理...
因此,我必须将 id 和 Parent_id 之间的 1-n 关系更改为包含 child_id 和 Parent_id 的独立 n-n 表,并具有 2 个数据透视列 effective_date 和 expiry_date。如果关系仍然有效,Expiry_date 为 null。
我的问题是我不知道如何使用CTE来检索这种数据库的数据,例如,我如何在特定时刻找到销售人员的最高经理?
如果A由B管理,B由C管理,所以我需要一个查询,当我输入A的id时,它返回C的id。
WITH RECURSIVE cte AS (
SELECT * FROM table WHERE user_name = 'Person A'
UNION ALL
SELECT table.* FROM table JOIN cte ON table.user_id = cte.managed_by
)
SELECT * FROM cte WHERE managed_by IS NULL;