我想做的是根据客户的交易频率来分类他们的客户。我记录了他们每次交易的日期,但是我无法计算出每个日期之间的平均差异。我真正想要的是一张显示我的表格:
| 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
函数及其功能,但是我不知道如何将它们分开。我也知道offset
函数可在Looker之类的工具中使用,但我不知道其背后的语法。
谢谢
答案 0 :(得分:0)
除了使用GROUP BY
外,我不知道该怎么说。
SELECT User, AVG(DATEDIFF(...))
FROM ...
GROUP BY User
答案 1 :(得分:0)
在MySQL 8+中,您可以使用LAG
来获取延迟的Transaction Date
,然后使用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
答案 2 :(得分:0)
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(user INT NOT NULL
,transaction_date DATE
,PRIMARY KEY(user,transaction_date)
);
INSERT INTO my_table VALUES
(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');
SELECT user
, AVG(delta) avg_delta
FROM
( SELECT x.*
, DATEDIFF(x.transaction_date,MAX(y.transaction_date)) delta
FROM my_table x
JOIN my_table y
ON y.user = x.user
AND y.transaction_date < x.transaction_date
GROUP
BY x.user
, x.transaction_date
) a
GROUP
BY user;
+------+-----------+
| user | avg_delta |
+------+-----------+
| 1 | 15.5000 |
| 2 | 15.0000 |
| 3 | 35.0000 |
+------+-----------+