如何检查一个人的名字是否发生了变化

时间:2017-04-04 13:57:23

标签: sql sql-server-2008

我有一个名为Person的表,包括ID,名字,姓氏,DOD,创建日期,修改日期,修改号码。我试图检查在特定时间范围内该人的姓名是否发生了变化。这是一个示例表。 我想知道2017年1月名字或姓氏改变的人。我期待输出中的1和2。我正在使用SQL Server 2008。

enter image description here

2 个答案:

答案 0 :(得分: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很重要,逻辑需要更多的比较。

答案 1 :(得分: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)
相关问题