添加列以跟踪百分比/变化率

时间:2017-06-26 19:29:45

标签: sql-server tsql

我有一张表,用于捕获备份文件大小和创建日期。我希望能够以比其他文件更快的速度跟踪哪些备份文件正在增长。如何设置查询以添加列以跟踪增长百分比或增长率?

示例数据:

Filename    CreationDate                Size
DB1         2017-06-19 13:00:28.450     96480
DB1         2017-06-20 13:00:36.627     97568
DB2         2017-06-18 22:00:00.800     19672
DB2         2017-06-19 22:00:00.370     19672
DB2         2017-06-20 22:00:00.913     19672
DB3         2017-06-18 22:00:04.520     17872840
DB3         2017-06-19 22:00:05.183     17873864
DB3         2017-06-20 22:00:06.400     17878984

编辑:我希望有2个单独的新列跟踪百分比变化。 Column1将是自最近一次以来的百分比变化(即昨天和今天之间的变化)。 Column2将是记录中最旧文件的百分比变化(即,在今天和特定文件名的最旧日期之间进行更改)。希望有所帮助。也不确定为什么我对这个问题投了反对。

1 个答案:

答案 0 :(得分:0)

tSQL ...假设SQL服务器。您可以使用窗口函数来查看分区(文件名)中的下一条记录,从而可以在查询中执行百分比。

SELECT td.fileName
     , td.creationdate
     , td.size
     , lag(td.size) over (partition by td.filename order by td.creationdate asc) / td.size as PercentChange
FROM TableData td

"魔法"在这里:lag(td.size) over (partition by td.filename order by td.creationdate asc)

这基本上说是返回与此文件名具有相同文件名的记录的大小,但是在评估记录之前是一个创建日期。

使用此功能,我们可以获得先前的值(如果存在)。然后做一些基本的数学运算。如果它是新尺寸/旧版或其它东西,我不确定你想要怎么做...注意如果size是一个整数,我们可能会涉及整数数学,所以你可能需要将大小转换为足够大小的十进制值(如果需要小数)