gpt4 book ai didi

sql-server-2008 - 迷失在为此场景创建查询

转载 作者:行者123 更新时间:2023-12-01 05:18:14 26 4
gpt4 key购买 nike

这是表结构的简化版本。

Employee  
(
ID GUID NOT NULL
OldID GUID NULL
Name VARCHAR(50) NOT NULL
CreationDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
)

它包含员工信息以及对员工属性所做的任何更改。通过这种方式,我们可以对所做的更改进行完整的审核。当 OldID 为 NULL 时,这基本上意味着最新的数据。这是一个示例,我使用整数值作为标识符以使这个示例更容易理解。
ID  OldId       Name        CreationDate  
13 NULL John 15-July-2013
12 13 John1 14-July-2013
11 12 John2 13-July-2013
10 11 John3 12-July-2013
121 NULL Smith 15-July-2013

首先,我可以从表中获取唯一的员工
SELECT ID, Name FROM Employee WHERE OldId IS NULL

我想获得最新的 ID 但它的最早名称。所以结果应该是两行
ID     Name  
13 John3
121 Smith

我不确定如何获得这些结果。任何帮助将不胜感激。

最佳答案

这是一种适用于您的数据的方法:

with groups as
(
select groupID = ID, *
from Employee
where OldID is null
union all
select g.groupID, e.*
from groups g
inner join Employee e on g.ID = e.OldID
)
, ranks as
(
select *
, firstRank = row_number () over (partition by groupID order by creationDate)
from groups
)
select ID = groupID
, Name
from ranks
where firstRank = 1

SQL Fiddle with demo .

关于sql-server-2008 - 迷失在为此场景创建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18390296/

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