我有一个表,假设employee,在粒度上,如果emp_id,dept,start_date,end_date意味着它维护emp_id和dept_id组合的历史记录。
Emp_id | 部门 | 开始日期 | 结束日期 |
---|---|---|---|
1 | 10 | 2023年1月1日 | 2023/03/01 |
1 | 10 | 2023年4月1日 | 2023 年 12 月 31 日 |
现在我有另一个表,它维护部门的历史及其属性
部门 | 地点 | 开始日期 | 结束日期 |
---|---|---|---|
10 | abc | 2019-06-18 | 2020-03-04 |
10 | abc | 2021-08-26 | 2021-08-26 |
10 | 定义 | 2021-08-26 | 2021-08-26 |
现在如何扩展员工表以将每个部门每个员工的历史记录从部门表合并到其中。
我已经对只有一个主键的表执行了此操作,例如我在不同的表中拥有不同的员工信息,并且可以合并每个表中的日期以创建一个大表,加入 emp_id 并合并日期
但我不知道如何解决这个问题。任何有关示例的帮助将不胜感激。
首先,请注意,虽然名称相同,但具有不同的角色并且来自不同的域(1/1/2023 可能永远不适用于部门 start_dates),因此我建议明确地调用这些数据点以避免混淆:emp_start_date, emp_end_date 代表员工,dept_start_date/dep_end_date 代表部门。
如果我假设你想通过添加员工记录有效期内有效的部门粒度值来“扩展”员工粒度,你需要通过“基础”粒度+时间重叠(或者,“翻转这个”)来匹配(加入)结束”,您需要丢弃在员工有效期结束后或在员工有效期之前结束的任何部门有效期段,再次翻转以获得“良好”条件)
emp_hist join dept_hist on
dept_hist.dept = emp_hist.dept and
dept_hist.start_date =< emp_hist.end_date and
dept_hist.end_date >= emp_hist.start_date