Sql server 我有一个场景,客户编号经常更改,现在我需要找到分配的最后一个客户编号
我在SQL Server中有一个客户日志表,它记录了客户编号的更改Sql server 我有一个场景,客户编号经常更改,现在我需要找到分配的最后一个客户编号,sql-server,Sql Server,我在SQL Server中有一个客户日志表,它记录了客户编号的更改 From_Cust# To_Cust# DateModified A1 A2 1/11/2001 A2 A3 2/11/2001 A3 A4 2/11/2001 B1 B2 3/11/2001 B2 B3 3/30/2001 对于某些客户来说,进入门槛相当高,高达2
From_Cust# To_Cust# DateModified
A1 A2 1/11/2001
A2 A3 2/11/2001
A3 A4 2/11/2001
B1 B2 3/11/2001
B2 B3 3/30/2001
对于某些客户来说,进入门槛相当高,高达200级
我试图得到的是找到上次更改的客户编号值,并将其应用于从第一个客户开始的所有客户
From_Cust# Latest_Cust#
A1 A4
A2 A4
A3 A4
B1 B3
B2 B3
如何实现这一点?您可以使用以下查询,该查询利用了: 递归CTE的所谓锚定成员:
SELECT From_Cust#, To_Cust# AS To_Cust#,
To_Cust# AS Latest_Cust#
FROM mytable AS m1
WHERE NOT EXISTS (SELECT 1
FROM mytable AS m2
WHERE m1.To_Cust# = m2.From_Cust#)
将选择包含“最终”客户的所有记录:
From_Cust# To_Cust# Latest_Cust#
-------------------------------------
A3 A4 A4
B2 B3 B3
所谓的CTE递归成员将获取客户层次结构中的所有记录。递归CTE可以做到这一点,但是!!!为什么您要更改客户编号???您的表是否有时间戳指示客户编号的分配时间?客户编号是否真的是字母数字且可能重复,如您的示例中所示?我将尝试编写一个函数来实现这一点。此示例数据不足以回答此问题。我猜你的客户不是那种格式,所以首先提供现实的价值观。其次,如果您有其他列可用于确定订单,如添加时的列或增量ID,那么这需要包含在问题中,因为给定了您的数据,无法解决此问题。该表有一个日期字段,指示客户编号何时更改,除此之外,没有增量ID。客户编号是数字。我只是把它们做成字母数字,以便于理解场景。
From_Cust# To_Cust# Latest_Cust#
-------------------------------------
A3 A4 A4
B2 B3 B3