我希望能得到如下所示的表帮助:
client_id | transaction_date | amount
-------------------------------------
123 | 2017-01-16 | 12
234 | 2017-01-11 | 25
345 | 2017-01-12 | 211
我想获得同一客户进行下一次交易的一段时间内的平均值-换句话说-导致特定用户下一次交易的平均天数是多少?
我在想一些TIMESTAMPDIFF,但不知道在这种情况下如何实现。
答案 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()
(使您节省函数参数)。