我正在使用MS SQL Server 2012数据库。 我正在查询客户历史记录表,该记录将在客户更改其任何详细信息时记录。他们可能会更改姓名,电话号码,地址等。
每当任何客户详细信息字段发生更改(包括整个客户记录中的每个字段,无论该字段是否更改)时,都会插入带有时间和日期戳的新行。
我只对客户的邮政编码更改的日期感兴趣,我想排除任何其他类型的更改。
我尝试了几种不同类型的查询,但均未成功,例如我所读过的关于LAG或QUALIFY之类的功能,这些功能已在其他SQL变体中使用,但在SQL Server中似乎并不存在。 >
SELECT CH.CustomerID,
MAX(CH.UpdateDate) AS LastAddressUpdate
FROM CustomerHistory CH
WHERE CH.Postcode NOT IN ...
我想要客户ID和邮政编码更改的最新日期
答案 0 :(得分:1)
您可以使用lag()
:
select customerid, max(updatedate)
from (select ch.*, lag(postcode) over (partition by customerid order by updatedate) as prev_postcode
from customerhistory ch
) ch
where prev_postcode <> postcode
group by customerid;
注意:这假设postcode
不是null
。可以修改查询以考虑到这一点。