2016-09-15 142 views
0

我有兩個表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 | 

反式

|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; 

我覺得我在這裏錯過了一些東西。這總是會選擇第一次訪問和第一次交易嗎? 而且我該如何獲得首次訪問和購買?

+0

如果你能提供預期的結果,那麼這將是對我們都更加清晰,對這項問題的鍛鍊。 – Susang

+0

@Suraz我試圖找到1.平均時間B/W第一次訪問和第一次購買和2.訪問和購買之間的平均時間。 –

回答

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; 
+0

我希望你的意思是'on e.user_id = t.user_id' –

+0

謝謝!出現第二個問題,我如何捕獲一個訪問事件,然後是事務? –

+0

@SunilBN。 。 。這聽起來像是一個不同的問題。您應該提出另一個問題,提供樣本數據和期望的結果。 –

相關問題