计算两个不同表的列之间的平均时间

时间:2016-09-15 10:41:32

标签: mysql sql

我有两张表eventtrans

CREATE TABLE `event` (
  `event_name` varchar(40) DEFAULT NULL,
  `user_id` varchar(40) DEFAULT NULL,
  `time` timestamp
);

CREATE TABLE `trans` (
  `item_id` varchar(40) DEFAULT NULL,
  `quantity` int(11) DEFAULT NULL,
  `price` decimal(10,0) DEFAULT NULL,
  `user_id` varchar(40) DEFAULT NULL,
  `time` timestamp
) 

假设事件表的值(多次用户访问):

|visit |a1 |2016-09-14 22:48:14 |
|visit |a2 |2016-09-14 22:48:28 |
|visit |a3 |2016-09-14 22:48:45 |
|visit |a1 |2016-09-15 15:10:39 |
|visit |a2 |2016-09-15 15:11:08 |
|visit |a1 |2016-09-15 15:12:34 |

trans

|i1 |1 |100 |a1 |2016-09-15 15:12:22 |
|i2 |2 |100 |a2 |2016-09-15 15:13:17 |
|j1 |1 |140 |a1 |2016-09-15 16:12:22 |
|j4 |3 |150 |a3 |2016-09-15 16:13:17 |

我试图找到首次访问和首次购买用户之间的平均时间。

SELECT trans.user_id , event.time, trans.time as TransTime, AVG(TIMESTAMPDIFF(second,event.time,trans.time))
FROM event JOIN trans
ON trans.user_id = event.user_id and event.time < trans.time
GROUP BY trans.user_id;

我觉得我在这里错过了一些东西。这总是会选择第一次访问和首次交易吗? 还有我如何首次访问和购买?

1 个答案:

答案 0 :(得分:1)

我建议在加入表之前汇总表格:

select avg(timestampdiff(second, e.mintime, t.mintime))
from (select user_id, min(time) as mintime
      from event e
      group by user_id
     ) e join
     (select user_id, min(time) as mintime
      from trans t
      group by user_id
     ) t
     on e.user_id = t.user_id;