如何解决如何实现 scd 类型 2 以进行以下操作
我们有如下数据:
事实表:
id | key | name | salary | loaction | start_date
1 | emp_1 | Shubham | 10000 | Delhi | 1998-02-01
2 | emp_2 | Ashish | 12000 | Pune | 2000-01-01
3 | emp_3 | Shubham | 15000 | Mumbai | 2002-01-01
预期输出:
id | key | name | salary | loaction | start_date | end_date | inactive
1 | emp_1 | Shubham | 10000 | Delhi | 1998-02-01 | 2002-01-01 | 0
2 | emp_2 | Ashish | 12000 | Pune | 2000-01-01 | null | 1
3 | emp_3 | Shubham | 15000 | Mumbai | 2002-01-01 | null | 1
我想实现这个。
我们在事实表和 emp_key 中有开始日期,它是唯一的,并且想要创建一个暗表,我们必须在其中显示 isactive 标志以及开始日期和结束日期。 结束日期将与下一个位置的开始日期相同。例如 shubham 2002-01-01 是德里的结束日期和孟买的开始日期..
我已经尝试过声明变量和传递值的解决方案,但是当我们有数千行时这是不可行的..
解决方法
您可以在此处使用 LEAD
分析函数:
SELECT
id,[key],name,salary,location,start_date,LEAD(start_date) OVER (PARTITION BY [key] ORDER BY start_date) end_date,CASE WHEN LEAD(start_date) OVER
(PARTITION BY [key] ORDER BY start_date) IS NOT NULL
THEN 0 ELSE 1 END isactive
FROM yourTable
ORDER BY id;
Demo
编辑:
要将上述选择保存到新表中,请使用:
SELECT (id,end_date,isactive) INTO yourNewTable
FROM (
-- the exact select from above
) t;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。