MS SQL 服务器:将 table 转换为 SCD 的最佳方式
MS SQL Server: best way to transform table to SCD
我需要将一个简单的历史 table 转换为缓慢变化的维度(下面的示例)。
最有效的方法是什么?
输入
ID - Update_date
----------
143432 - '2019-02-03'
143432 - '2019-11-01'
143432 - '2020-03-16'
输出
ID - row_actual_date_from - row_actual_date_to
----------
143432 - '2019-02-03' - '2019-10-31'
143432 - '2019-11-01' - '2020-03-15'
143432 - '2020-03-16' - '9999-12-31'
我想你可以在这里使用 LEAD
:
SELECT
ID,
Update_date AS row_actual_date_from,
DATEADD(day, -1, LEAD(Update_date, 1, '9999-12-31')
OVER (PARTITION BY ID ORDER BY Update_date)) AS row_actual_date_to
FROM yourTable
ORDER BY
ID,
Update_date;
我需要将一个简单的历史 table 转换为缓慢变化的维度(下面的示例)。 最有效的方法是什么?
输入
ID - Update_date
----------
143432 - '2019-02-03'
143432 - '2019-11-01'
143432 - '2020-03-16'
输出
ID - row_actual_date_from - row_actual_date_to
----------
143432 - '2019-02-03' - '2019-10-31'
143432 - '2019-11-01' - '2020-03-15'
143432 - '2020-03-16' - '9999-12-31'
我想你可以在这里使用 LEAD
:
SELECT
ID,
Update_date AS row_actual_date_from,
DATEADD(day, -1, LEAD(Update_date, 1, '9999-12-31')
OVER (PARTITION BY ID ORDER BY Update_date)) AS row_actual_date_to
FROM yourTable
ORDER BY
ID,
Update_date;