如何计算Call表与Order表中First Call和First Order时间的差值
两张表时间差计算方案
前提说明
两张表通过共同的唯一关联字段(比如用户IDuser_id)匹配同一主体的通话、订单数据,计算逻辑为先分别聚合得到每个主体的首次通话时间、首次订单时间,再关联计算两者的时间差。
具体实现(SQL示例)
以MySQL为例,示例代码如下:
SELECT c.user_id, c.`First Call` 首次通话时间, o.`First Order` 首次订单时间, -- 按需要选择时间差精度,以下为常用的天、小时精度计算 DATEDIFF(o.`First Order`, c.`First Call`) 时间差_天, TIMESTAMPDIFF(HOUR, c.`First Call`, o.`First Order`) 时间差_小时 FROM ( -- 聚合Call表得到每个用户的首次通话时间 SELECT user_id, MIN(call_time) AS `First Call` FROM `Call` GROUP BY user_id ) c LEFT JOIN ( -- 聚合Order表得到每个用户的首次订单时间 SELECT user_id, MIN(order_time) AS `First Order` FROM `Order` GROUP BY user_id ) o ON c.user_id = o.user_id -- 可选过滤:只保留既有首次通话也有首次订单的用户,不需要可删除该行 WHERE o.`First Order` IS NOT NULL
适配说明
- 其他数据库可替换对应时间差函数:PostgreSQL直接用
o."First Order" - c."First Call"得到时间间隔,SQL Server用DATEDIFF(时间精度, c.[First Call], o.[First Order])计算 - 关联字段不是
user_id的,替换为你实际使用的关联字段即可 - JOIN类型可按需调整:需要保留所有有首次通话的用户用LEFT JOIN,保留所有有首次订单的用户用RIGHT JOIN,两者都保留用FULL JOIN
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

