每天跟踪 table 的变化

Track changes in a table on a daily basis

我有一个 table 存储我们的每个属性以及它们是否在网站上有特定的图标。此 table 每天更新并标记日期。

Table 字段:

所有设施字段都存储为 1 [有图标] 或 0 [无图标]

我需要的是通过 属性 向我显示任何设施字段是否每天发生变化的查询。

如果有人能指出我正确的方向,将不胜感激。

您可以做的一件事是计算每一行的哈希值以比较是否有任何变化:

select hashbytes('MD5',cast(FacilityBabyFriendly * 1000000 + FacilityDogsAccepted * 100000 + FacilitySwimmingPool * 10000 + FacilityHotTub * 1000 + FacilityInternetAccess * 100 + FacilitySeaViews * 10 + FacilityParking
as varchar(100) )
) from yourtable

以下查询将为您提供与前一天相比至少有一个设施字段发生变化的属性列表

SELECT 
     PropertyCode
    ,PropertyName
FROM Souce s1
WHERE 
    DateStamp = Current_Date
    AND 
    EXISTS
    (SELECT 1 
        FROM 
    Source s2
    WHERE 
        s1.PropertyCode=s2.PropertyCode
        AND DateStamp = Current_Date - 1 Day
        AND 
        (
        (s1.FacilityBabyFriendly<>s2.FacilityBabyFriendly)
        OR 
        (s1.FacilityDogsAccepted<>s2.FacilityDogsAccepted)
        OR
        (s1.FacilitySwimmingPool<>s2.FacilitySwimmingPool)
        OR 
        (s1.FacilityHotTub<>s2.FacilityHotTub)
        OR 
        (s1.FacilityInternetAccess<>s2.FacilityInternetAccess)
        OR 
        (s1.FacilitySeaViews<>s2.FacilitySeaViews)
        OR 
        (s1.FacilityParking<>s2.FacilityParking)
        )
    )

值 <> 0 表示设施已更改

SELECT DateStamp
      ,PropertyCode
      ,PropertyName
      ,FacilityBabyFriendly - LAG(FacilityBabyFriendly) OVER (PARTITION BY PropertyCode, PropertyName ORDER BY DateStamp) AS FacilityBabyFriendlyChanged
      ,FacilityDogsAccepted - LAG(FacilityDogsAccepted) OVER (PARTITION BY PropertyCode, PropertyName ORDER BY DateStamp) AS FacilityDogsAcceptedChanged
      ,FacilitySwimmingPool - LAG(FacilitySwimmingPool) OVER (PARTITION BY PropertyCode, PropertyName ORDER BY DateStamp) AS FacilitySwimmingPoolChanged
      ,FacilityHotTub - LAG(FacilityHotTub) OVER (PARTITION BY PropertyCode, PropertyName ORDER BY DateStamp) AS FacilityHotTubChanged
      ,FacilityInternetAccess - LAG(FacilityInternetAccess) OVER (PARTITION BY PropertyCode, PropertyName ORDER BY DateStamp) AS FacilityInternetAccessChanged
      ,FacilitySeaViews - LAG(FacilitySeaViews) OVER (PARTITION BY PropertyCode, PropertyName ORDER BY DateStamp) AS FacilitySeaViewsChanged
      ,FacilityParking - LAG(FacilityParking) OVER (PARTITION BY PropertyCode, PropertyName ORDER BY DateStamp) AS FacilityParkingChanged
FROM YourTable