Sql server 跟踪SQL数据库中的更改
我花了大量时间在谷歌上搜索,并找到了解决更简单表格的可能方法 我的公司虔诚地使用BGInfo跟踪200多台web服务器上的80个属性。这些字段混合了服务器统计IP地址、OSVer、HyperV主机和各种已安装软件组件的版本。计划任务每天将此信息写入所有web服务器到单个数据库,当前记录数>300K。我们需要一个查询最终被输入到一个报告中,以给出在任何给定的web服务器上发生变化的时间。一种自动变更控制,如果你愿意的话 示例:WebSvr_XYZ从一开始就使用2G的RAM,几个月后才分配额外的RAM。一年后,它被赋予了一个新的IP地址Sql server 跟踪SQL数据库中的更改,sql-server,distinct,Sql Server,Distinct,我花了大量时间在谷歌上搜索,并找到了解决更简单表格的可能方法 我的公司虔诚地使用BGInfo跟踪200多台web服务器上的80个属性。这些字段混合了服务器统计IP地址、OSVer、HyperV主机和各种已安装软件组件的版本。计划任务每天将此信息写入所有web服务器到单个数据库,当前记录数>300K。我们需要一个查询最终被输入到一个报告中,以给出在任何给定的web服务器上发生变化的时间。一种自动变更控制,如果你愿意的话 示例:WebSvr_XYZ从一开始就使用2G的RAM,几个月后才分配额外的RA
Server Time_stamp Host IP RAM
-------------------------------------------------------
WebSvr_XYZ June 1, 2016 Virt5a 192.168.10.45 2G
WebSvr_XYZ June 2, 2016 Virt5a 192.168.10.45 2G
WebSvr_XYZ Aug 20, 2016 Virt5a 192.168.10.45 4G
WebSvr_XYZ Aug 21, 2016 Virt5a 192.168.10.45 4G
WebSvr_XYZ July 18, 2017 Virt5a 192.168.20.105 4G
WebSvr_XYZ July 19, 2017 Virt5a 192.168.20.105 4G
WebSvr_XYZ July 20, 2017 Virt5a 192.168.20.105 4G
在对WebSvr_XYZ运行时,对超过540条记录的输出将是
June 1, 2016 Virt5a 192.168.10.45 2G
Aug 20, 2016 Virt5a 192.168.10.45 4G
July 18, 2017 Virt5a 192.168.20.105 4G
我尝试了针对表的select distinct,他们将其与完整表连接,在所有相关列上连接,并使用MINTimestamp获得第一个。但我要么得到错误的时间戳,要么根本没有结果。使用行号作为事件序列。之后,您可以内部连接回它自己的数据,以比较前一个时间戳和当前时间戳
; with cte as
(
select *, rn = row_number() over (partition by Server order by Time_stamp)
from yourtable
)
select *
from cte c1
inner join c2 on c1.Server = c2.Server
and c1.rn = c2.rn - 1
where c1.IP <> c2.IP
or c1.RAM <> c2.RAM
使用行号作为事件序列。之后,您可以内部连接回它自己的数据,以比较前一个时间戳和当前时间戳
; with cte as
(
select *, rn = row_number() over (partition by Server order by Time_stamp)
from yourtable
)
select *
from cte c1
inner join c2 on c1.Server = c2.Server
and c1.rn = c2.rn - 1
where c1.IP <> c2.IP
or c1.RAM <> c2.RAM