2016-04-27 10 views
0

Netezzaのweb_eventテーブルに、以下の形式でデータがあります。SQLを使用したセッションの継続時間と時間の計算

vstr_id | sessn_id | sessn_ts   | wbpg_nm 
V1  | V1S1  | 02-02-2015 09:20:00 | /home/login 
V1  | V1S1  | 02-02-2015 09:30:00 | /home/contacts 
V1  | V1S1  | 02-02-2015 09:50:00 | /home/search 
V2  | V2S1  | 02-02-2015 09:10:00 | /home 
V2  | V2S1  | 02-02-2015 09:15:00 | /home/apps 
V2  | V2S2  | 02-02-2015 09:20:00 | /home/news 
V2  | V2S2  | 02-02-2015 09:23:00 | /home/news/internal 

これはソーステーブルです。

私はそのweb_eventテーブルを使用して、次のような別のテーブルを作成しようとしています。

次のように、sessn_durtnテーブルとtime_on_pgテーブルをロードします。

1)sessn_durtn列:これは、セッション開始イベントとセッション終了イベントの間の時間差が、ソートされた時間フィールドに基づいている必要があります。 0秒を持つことができ、現在のページと次のページおよびセッションの最後のページとの間の時間差である:分または秒

I am trying to to do 

Insert into sessn_durtn (select VSTR_ID, 
      SESSN_ID, 
      ????? as sessn_durtn, 
      from web_event) 

vstr_id | sessn_id | seesn_durtn 
V1  | V1S1  | 30mins  
V2  | V2S1  | 5mins     
V2  | V2S2  | 3mins   

2)time_on_page列で表され、それはすることができます。数分または数秒で表すことができます。我々はネティーザまたは任意のSQLクエリでこれを行うことができますどのように

Insert into time_on_pg (select VSTR_ID, 
      SESSN_ID, 
      sessn_ts, 
      WBPG_NM, 
      ????? as time_on_page 
      from web_event) 

vstr_id | sessn_id | sessn_ts   | wbpg_nm    | time_on_page 
V1  | V1S1  | 02-02-2015 09:20:00 | /home/login   | 10mins 
V1  | V1S1  | 02-02-2015 09:30:00 | /home/contacts  | 20mins 
V1  | V1S1  | 02-02-2015 09:50:00 | /home/search   | 0mins 
V2  | V2S1  | 02-02-2015 09:10:00 | /home    | 5mins 
V2  | V2S1  | 02-02-2015 09:15:00 | /home/apps   | 0mins 
V2  | V2S2  | 02-02-2015 09:20:00 | /home/news   | 3mins 
V2  | V2S2  | 02-02-2015 09:23:00 | /home/news/internal | 0mins 

?セッション期間については

答えて

1

SELECT vstr_id, MAX(sessn_ts), MIN(sessn_ts), 
TIMESTAMPDIFF(MINUTE,MIN(sessn_ts),MAX(sessn_ts)) AS sessn_durtn 
FROM `web_event` 
GROUP BY vstr_id, sessn_id 

、ページ上の時間のために(あなたは彼らが去る時間の記録を持っていないので、私は最後のページに時間を得ることができませんあなたがそのデータを持っているならば、あなたは他のものと衝突しない固定wbpg_nmでそれを挿入することができます。「exit」かそのようなものかもしれません)

SELECT t1.*, 
IFNULL(TIMESTAMPDIFF(MINUTE, t1.sessn_ts, t2.sessn_ts), 0) AS time_on_pg 
FROM 
(
    SELECT w1.*, 
    @rownum := @rownum + 1 AS position 
    FROM `web_event` w1 
    JOIN (SELECT @rownum := 0) r 
    ORDER BY vstr_id, sessn_id, sessn_ts 
) t1 
LEFT JOIN 
(
    SELECT w1.*, 
    @rownum2 := @rownum2 + 1 AS position 
    FROM `web_event` w1 
    JOIN (SELECT @rownum2 := 0) r 
    ORDER BY vstr_id, sessn_id, sessn_ts 
) t2 
ON t1.vstr_id = t2.vstr_id 
AND t1.sessn_id = t2.sessn_id 
AND t1.position = t2.position - 1 
0

ありがとう、あなたの時間と労力のために。

Sessn_durationは正しく、正常に動作します。

ページ上の時間これは簡単な答えです。

SELECT vstr_id, 
     sessn_id, 
     extract(epoch from (lag(event_ts) over (partition by vstr_id, sessn_id order by event_ts DESC) - event_ts)) AS tm_on_pg, 
     wbpg_nm 

from pagepath_poc;

関連する問題