客户每笔交易之间的平均时间
Posted
技术标签:
【中文标题】客户每笔交易之间的平均时间【英文标题】:Average time between each transaction for customers 【发布时间】:2017-01-02 13:46:08 【问题描述】:我如何知道(以秒为单位)?
Time Customer ID Transaction
11/08/2020 00:00:01 1 111
11/08/2020 00:02:00 2 0
11/08/2020 00:02:07 1 0
11/08/2020 00:03:09 3 412
11/08/2020 00:04:00 1 0
在 Expected 表之前,我需要显示所需的步骤: 对于客户 ID 1 有 3 笔交易,差异交易。
第一次和第二次事务之间的差异为 126 秒。 第二次和第三次交易相差 113 秒。预期表:
Customer ID Average time between each transactions for customer
1 (126+113)/3
2
3
【问题讨论】:
事务之间的平均时间应该是(126 + 113) / 2
,而不是3
。
【参考方案1】:
平均时间是总时间除以事务数减一。所以:
select customerId,
(case when count(*) > 1
then datediff(second, min(time), max(time)) / (count(*) - 1)
end) as avg_time
from t
group by customerId;
注意:SQL Server 进行整数除法。如果您想要一个非整数作为结果,您可能想要在表达式中进行转换或 count(*) - 1.0
。
这确实假设时间只会增加(对于此类问题,这似乎是一个合理的假设)。
【讨论】:
我认为你有一个错误,因为你应该除以count(*) - 1
。
@FDavidov 。 . .实际上,OP有这个问题。我改变了我的答案,并在这一点上添加了评论。
是的,我在按下 ENTER 的同时看到了你的更新。
@GurwinderSingh 。 . .谢谢你。这笔款项不属于那里。
@Gordon Linoff 我认为此查询仅适用于每个客户 2 条记录...不仅如此,它不会给出正确的输出。在这里,在这种情况下,它只需要 min 和 max一个 id...min 和 max 之间的其他记录呢..我们也需要考虑它们..如果我错了请纠正我。以上是关于客户每笔交易之间的平均时间的主要内容,如果未能解决你的问题,请参考以下文章