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