mysql - 如何获取多个日期之间的平均时间

标签 mysql

我想做的是根据客户的交易频率对他们进行分类。我记录了他们每次交易的日期,但我无法计算出每个日期之间的平均增量。我实际上想要的是一张显示我的表格:

| User | Average Frequency
|  1   | 15
|  2   | 15
|  3   | 35
...

我当前拥有的数据格式如下:

| User | Transaction Date
|  1   | 2018-01-01
|  1   | 2018-01-15
|  1   | 2018-02-01
|  2   | 2018-06-01
|  2   | 2018-06-18
|  2   | 2018-07-01
|  3   | 2019-01-01
|  3   | 2019-02-05
...

基本上,每个客户都会有多个交易,我想了解如何获取每个日期之间的增量以及增量的平均值。

我知道 datediff 函数及其工作原理,但我不知道如何将它们拆分为事务。我还知道 Looker 等工具中提供了 offset 函数,但我不知道其背后的语法。

谢谢

最佳答案

在 MySQL 8+ 中,您可以使用 LAG获取延迟的交易日期,然后使用DATEDIFF获取两个连续日期之间的差异。然后您可以取这些值的平均值:

SELECT User, AVG(delta) AS `Average Frequency`
FROM (SELECT User, 
             DATEDIFF(`Transaction Date`, LAG(`Transaction Date`) OVER (PARTITION BY User ORDER BY `Transaction Date`)) AS delta
      FROM transactions) t
GROUP BY User

输出:

User    Average Frequency
1       15.5
2       15
3       35

Demo on dbfiddle.com

关于mysql - 如何获取多个日期之间的平均时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54943917/

相关文章:

mysql - 返回 5 个结果 SQL

mysql - 如何过滤 hashMap 的结果以选取以某个字母开头的所有键 Groovy

php - 当 php mysql_query 在 phpmyadmin 中工作时,某些列的空白结果

MySQL错误? (三角函数)

php - 从 php while 循环中输出的两个 html <option> 不起作用

mysql - 如何在 MySQL 中获取记录数以及最小值/最大值?

mysql - 加快 MySQL 查询速度,检查具有不匹配值和更新的重复项

mysql - 处理 mysql "ERROR 1062 (23000)"

php - 如何使用mysql选择多个最大值

mysql - SQL - 获取名称而不是 ID