2017-04-04 342 views
0

我得到了一个名为Person的表格,它包括ID,名字,姓氏,DOD,创建日期,修改日期,修改编号。我试图检查人员的姓名在特定时间段内是否发生了变化。这是一个示例表。 我想知道在2017年1月更改名字或姓氏的人。我期待输出中的1和2。即时通讯使用的是SQL Server 2008的如何检查一个人的名字是否被更改

enter image description here

+0

为什么不选择“4”? –

+0

4也应该在输出中。 – user1469630

回答

1

您方便有修改号码,我以为是连续的。所以,你可以用加入和一些逻辑做到这一点:

select p.*, pprev.firstname, pprev.lastname 
from persons p join 
    persons pprev 
    on pprev.id = pprev.id and 
     pprev.modnum = p.modnum - 1 
where p.moddate >= '2017-01-01' and 
     p.moddate < '2017-02-01' and 
     (p.firstname <> pprev.firstname or 
     p.lastname <> pprev.lastname 
    ); 

如果你只是想这个人的ID,然后使用select distinct p.id

注意:这假定名称不是NULL。如果处理NULL很重要,则逻辑需要多一点比较。

+0

选择P *,pprev.firstname,pprev.lastname 从人p加入 者上p.id = pprev.id和 pprev.modnum = p.modnum pprev - 1 其中p.moddate> =“2017 -01-01'和 p.moddate <'2017-02-01'和 (p.firstname <> pprev.firstname或 p.lastname <> pprev.lastname ); – user1469630

0

加入表本身的ModifyNo

select P1.* 
from Person P1 
left join Person P2 
    on P1.ModifyNo = P2.ModifyNo +1 
where P1.ModifyDate between @Date1 and @Date2 
and (P1.FirstName <> P2.Firstname 
    or P1.LastName <> P2.Lastname) 
相关问题