【问题标题】: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

标签: sql sql-server


【解决方案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 之间的其他记录呢..我们也需要考虑它们..如果我错了请纠正我。
猜你喜欢
  • 1970-01-01
  • 2018-10-15
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多