每天跟踪 table 的变化
Track changes in a table on a daily basis
我有一个 table 存储我们的每个属性以及它们是否在网站上有特定的图标。此 table 每天更新并标记日期。
Table 字段:
- 日期戳,
- 属性代码,
- 属性名称,
- FacilityBabyFriendly,
- FacilityDogsAccepted,
- 设施游泳池,
- FacilityHotTub,
设施互联网接入,
- FacilitySeaViews,
- 设施停车场
所有设施字段都存储为 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
我有一个 table 存储我们的每个属性以及它们是否在网站上有特定的图标。此 table 每天更新并标记日期。
Table 字段:
- 日期戳,
- 属性代码,
- 属性名称,
- FacilityBabyFriendly,
- FacilityDogsAccepted,
- 设施游泳池,
- FacilityHotTub, 设施互联网接入,
- FacilitySeaViews,
- 设施停车场
所有设施字段都存储为 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