历史记录表中的字段更改时如何返回日期

时间:2019-06-26 12:50:26

标签: sql sql-server tsql

我正在使用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和邮政编码更改的最新日期

1 个答案:

答案 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。可以修改查询以考虑到这一点。