问题描述
我们每天都有一个流,我们会在其中获取使用各种产品的客户列表。
我正在尝试为客户创建一个表格,我们可以在其中跟踪他们的变化,同时,我们可以获得一个不同的客户列表。
该流每天包含数千条记录。这就是我们认为应该从 SCD Type 1 转向 SCD Type 2 的原因。
我们想实现这个过程,让它每天运行,获取最后一天的记录,并将它们与整个表进行比较。如果客户有任何更改,它将将该行标记为 0,并获取新行并将其标记为 1。
但是在这个过程中,我得到了新的记录,但是我在运行存储过程时也得到了重复的数据。
请指导。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create PROC [dbo].[sp_UpdateCustomerInfoHistory] AS BEGIN
SET
NOCOUNT ON --Truncate Table [dbo].[CustomerInfoHistory];
DECLARE @TODAY DATE = GETDATE();
DECLARE @YESTERDAY DATE = GETDATE() - 1;
WITH CTE AS (
SELECT
DISTINCT(a.CustomerId) AS CustomerId,ISNULL(b.[CustomerName],a.[CustomerName]) AS CustomerName,ISNULL(b.[CurrentDefaultDomain],a.[CustomerName]) AS CurrentDefaultDomain,ISNULL(b.[CustomerCountryCode],'Unknown') AS CustomerCountryCode,ISNULL(b.[HasC],0) AS HasC,ISNULL(b.[HasG],0) AS HasG,ISNULL(b.[IsV],0) AS IsV,ISNULL(
ISNULL(b.[CustomerCreatedDate],a.[ProductCreatedTimeUtc]),@TODAY
) AS CustomerCreatedDate,ISNULL(b.[CustomerState],'Active') AS CustomerState,ISNULL(b.[CustomerType],'RegularCustomer') AS CustomerType,ISNULL(b.[DataCenterProduct],'Unknown') AS DataCenterProduct,ISNULL(b.[DataCenterModel],'Unknown') AS DataCenterModel,ISNULL(b.[IsTestCustomer],0) AS IsTestCustomer,ISNULL(b.[CommunicationLanguage],'Unknown') AS CommunicationLanguage,ISNULL(b.[IsInternal],0) AS IsInternal,ISNULL(b.[IndustryName],'N/A') AS IndustryName,ISNULL(c.MappingID,0) AS MappingID
FROM
[dbo].[ProductDetails] AS a
LEFT JOIN [Common].[vwdimCustomer_Staging] AS b ON a.CustomerId = b.CustomerId
LEFT JOIN [Common].[vwmapCustomerMappingID_Staging] AS c ON b.CustomerId = c.CustomerId
WHERE a.[TIMESTAMP] = @YESTERDAY
),CTE1 AS (
Select *,BINARY_CHECKSUM(
CustomerId,CustomerName,IsTestCustomer,IsInternal
) AS MKEY
from CTE)
MERGE INTO [dbo].[CustomerInfoHistory] AS T USING CTE1 AS S ON T.[MKEY] = S.[MKEY]
WHEN MATCHED
AND [Current_Flag] = 1
AND T.CustomerName <> S.CustomerName THEN
UPDATE
SET
T.Current_Flag = 0,T.End_date = @YESTERDAY
WHEN NOT MATCHED BY TARGET THEN
INSERT
(
CustomerId,CurrentDefaultDomain,CustomerCountryCode,HasC,HasG,IsV,CustomerCreatedDate,CustomerState,CustomerType,DataCenterProduct,DataCenterModel,CommunicationLanguage,IsInternal,IndustryName,MappingID,Eff_Date,End_Date,Current_Flag,MKEY,RefreshedDate
)
VALUES
(
S.CustomerId,S.CustomerName,S.CurrentDefaultDomain,S.CustomerCountryCode,S.HasC,S.HasG,S.IsV,S.CustomerCreatedDate,S.CustomerState,S.CustomerType,S.DataCenterProduct,S.DataCenterModel,S.IsTestCustomer,S.CommunicationLanguage,S.IsInternal,S.IndustryName,S.MappingID,@YESTERDAY,'12/31/2099',1,S.MKEY,@TODAY
);
END
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)