Sql平均每天增加

时间:2011-03-02 18:26:34

标签: tsql

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

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

enter image description here

2 个答案:

答案 0 :(得分:2)

这适用于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

答案 1 :(得分:0)

假设余额总是增加,您可以在第一天找到余额,在最后一天找到余额,并计算平均值(基于天数):

;with minmax as ( -- subquery to get min / max data per user
    select
        username
        ,min(capturedate) as mincapturedate
        ,min(balance) as minbalance
        ,max(capturedate) as maxcapturedate
        ,max(balance) as maxbalance
    from
        [5171722] t
    group by username
)
,averageincrease as ( -- subquery to calculate average daily increase
    select
        username
        ,datediff(day, mincapturedate, maxcapturedate) as numdays
        ,(maxbalance - minbalance) as totalincrease
        ,(maxbalance - minbalance) / datediff(day, mincapturedate, maxcapturedate) as
            averagedailyincrease
    from
        minmax
)
-- pull results together, with highest average daily increase first
select
    *
from
    averageincrease
order by
    averagedailyincrease desc

结尾处的字段averagedailyincrease包含每日平均增幅。