2017-01-02 82 views
0

如何知道客户每次交易之间的平均时间(秒)?每笔交易之间客户的平均时间

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 

预期的表,我需要显示所需的步骤之前: 客户ID 1有3笔交易,差异交易。

  • 第一次和第二次交易之间的差额为126秒。
  • 第二个和第三个交易113秒之间的差异。

预期的表:

Customer ID   Average time between each transactions for customer 
1       (126+113)/3 
2 
3 
+1

*交易之间的平均时间*应该是'(126 + 113)/ 2',而不是'3'。 –

回答

1

的平均时间是总时间除以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

这确实假定时间只是在增加(这对于这类问题似乎是一个合理的假设)。

+0

我认为你有一个错误,因为你应该除以count(*) - 1'。 – FDavidov

+0

@FDavidov。 。 。其实,OP有这个问题。我改变了我的答案,并添加了一条评论。 –

+0

是的,我在同一时间看到您的更新,我按下ENTER键。 – FDavidov