直到某个时间点为止的一列的SQL平均

时间:2019-01-15 18:57:29

标签: sql

我想计算每个用户从所有先前的贷款中取消贷款所花费的平均时间,以及他在特定时间点之前所获得的贷款数量。

假设我有这个表,其中包含每个客户的ID,贷款的日期以及用户取消贷款的时间。

ID  date       time
1   17/7/2018   8    
1   7/8/2018    18
2   21/12/2018  0
2   22/12/2018  5
2   31/12/2018  5

我希望得到这个结果

ID  date       AVG(time) n_loans
1   17/7/2018   8         0
1   7/8/2018    13        1
2   21/12/2018  0         0
2   22/12/2018  2.5       1
2   31/12/2018  3.33      2

2 个答案:

答案 0 :(得分:0)

您可以使用运行平均值:

select id, date, time,
       avg(time) over (partition by id order by date) as avg_time,
       row_number() over (partition by id order by date) as n_loans
from t;

答案 1 :(得分:0)

也许,因为您没有提到dbms,所以我通常对所有dbms方式(例如通过join尝试)

    Select * from ( 
      ( Select id,date,count(*)
        from table group by id,date) t1 
           JOIN
        (SELECT AVG(TIME)
          FROM TABLE
         GROUP BY ID  ) t2
          ON 
        t1.ID =t2.id )