Tsql Sql平均每日增长率

Tsql Sql平均每日增长率,tsql,Tsql,我有一个db表,它有一个日期字段、一个用户名字段和一个整数点平衡字段。每天都有一个记录,在工作日结束时存储余额 我正在寻找计算每个用户平均每日增长的最有效方法,将最高平均每日增长排序为最低 假设余额一直在增加,您只需找到第一天的余额,最后一天的余额,然后计算平均值(基于天数): 最后的字段averagedailyincrease包含平均每日增加量。这应该适用于MS SQL Server。它假设每个用户的每个日期都有一个条目,没有日期间隔,也没有时间(小时、分钟、秒)值的干扰。(而且,没有空值!)

我有一个db表,它有一个日期字段、一个用户名字段和一个整数点平衡字段。每天都有一个记录,在工作日结束时存储余额

我正在寻找计算每个用户平均每日增长的最有效方法,将最高平均每日增长排序为最低


假设余额一直在增加,您只需找到第一天的余额,最后一天的余额,然后计算平均值(基于天数):


最后的字段
averagedailyincrease
包含平均每日增加量。

这应该适用于MS SQL Server。它假设每个用户的每个日期都有一个条目,没有日期间隔,也没有时间(小时、分钟、秒)值的干扰。(而且,没有空值!)它将计算平均每天的增长,不管它是否每天都在增长

SELECT mt.UserName, avg(mt.Balance - mt2.Balance) AvgDailyIncrease
 from MyTable mt
  inner join MyTable mt2
   on mt2.UserName = mt.UserName
    and mt2.CaptureDate = dateadd(dd, -1, mt.CaptureDate)
 group by mt.UserName
 order by avg(mt.Balance - mt2.Balance) desc

我认为这是最好的总体想法,但不喜欢这样的假设,即余额总是会增加,
min(date)
将与
min(balance)
来自同一行。马丁:我同意。但是如果OP审查了这些假设,那么效率会更高。您是否有一个包含所有用户名的单独表格?平均每个用户有多少条记录?+1,但最好更精确地计算实际平均值(即将
int
转换为
float
)。输出平均值可能仍然使用四舍五入的
int
值。
SELECT mt.UserName, avg(mt.Balance - mt2.Balance) AvgDailyIncrease
 from MyTable mt
  inner join MyTable mt2
   on mt2.UserName = mt.UserName
    and mt2.CaptureDate = dateadd(dd, -1, mt.CaptureDate)
 group by mt.UserName
 order by avg(mt.Balance - mt2.Balance) desc