带有购买表的AVG间隔长度

时间:2018-09-19 23:09:10

标签: mysql sql date average

我希望能得到如下所示的表帮助:

  client_id | transaction_date | amount
  -------------------------------------
      123   |     2017-01-16   |   12
      234   |     2017-01-11   |   25 
      345   |     2017-01-12   |  211

我想获得同一客户进行下一次交易的一段时间内的平均值-换句话说-导致特定用户下一次交易的平均天数是多少?

我在想一些TIMESTAMPDIFF,但不知道在这种情况下如何实现。

2 个答案:

答案 0 :(得分:0)

做这样的事

SELECT client_id,avg(DATEDIFF(transaction_date,next_transaction_date)) FROM
(
    SELECT 
    client_id,
    transaction_date ,
    LEAD(transaction_date,1) OVER (
        PARTITION BY client_id
        ORDER BY transaction_date) next_transaction_date
    FROM 
    table    
) as s WHERE next_transaction_date is not null

这里是了解LEAD功能的参考链接

http://www.mysqltutorial.org/mysql-window-functions/mysql-lead-function/

答案 1 :(得分:0)

最简单的方法是将最大值和最小值之差除以行数少一。

所以:

select client_id,
       ( datediff(max(transaction_date), min(transaction_date)) /
         nullif(count(*) - 1, 0)
       ) as avg_duration
from t
group by client_id;

因为您要处理日期,所以可以使用datediff()而不是timestampdiff()(使您节省函数参数)。