gpt4 book ai didi

sql - 如何实现 scd 类型 2 以进行以下操作

转载 作者:行者123 更新时间:2023-12-04 08:20:34 25 4
gpt4 key购买 nike

我们有以下数据:
事实表:

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 是德里的结束日期和孟买的开始日期..
请给出sql-server的解决方案。
我已经尝试过使用声明变量和传递值的解决方案,但是当我们有数千行时这是不可行的。

最佳答案

您可以使用 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;
screen capture from demo link below
Demo
编辑:
要将上述选择保存到新表中,请使用:
SELECT (id, [key], name, salary, location, start_date,
end_date, isactive) INTO yourNewTable
FROM (
-- the exact select from above
) t;

关于sql - 如何实现 scd 类型 2 以进行以下操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65516892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com