2016-09-15 16 views
0

私は2つのテーブルeventtransを持っています。2つの異なるテーブルの列間の平均時間を計算する

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私は最初の訪問、最初の購入、そして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

私はあなたが 'e.user_id = t.user_id'を意味することを願っています –

+0

ありがとう! 2番目の質問になると、トランザクションの後に訪問イベントをキャプチャするにはどうすればよいですか? –

+0

@ SunilBN。 。 。それは別の質問のように聞こえる。あなたは、サンプルデータと希望の結果で別の質問をする必要があります。 –

関連する問題