2013-03-05 60 views
1

我想寫一個hive查詢,我對兩個不同類型在同一個表中的關係感興趣。例如,說我的表是建立這樣的:Hive(或MySQL):使用最大時間戳查找不同類型的事件

event_type  timestamp    source 
completion  2013-03-04 12:00:55 NULL 
completion  2013-03-04 11:55:55 NULL 
impression  2013-03-04 11:53:45 A 
impression  2013-03-04 11:57:55 A 
impression  2013-03-04 11:58:00 B 

每完成,我想抓住最近一次展示的時間戳,以及它的來源。例如,我希望從上面的示例的查詢中得出:

completion_timestamp most_recent_impression source 
2013-03-04 12:00:55  2013-03-04 11:58:00  B 
2013-03-04 11:55:55  2013-03-04 11:53:45  A 

任何提示?

回答

1

這依賴於時代的獨特性。你應該添加一個ID列來解決這個問題。

子查詢獲取完成時間(i.ts < c.ts)之前的每個完成時間(GROUP BY c.ts)和最近的印象時間(MAX(i.ts))。

SELECT 
    completionTime, impressionTime, s.source 
FROM 
(SELECT 
    c.ts AS completionTime, MAX(i.ts) AS impressionTime 
FROM t AS c 
JOIN t AS i 
WHERE c.event_type = 'completion' 
AND i.event_type = 'impression' 
AND i.ts < c.ts -- impressions happen before completions 
GROUP BY c.ts) AS t2 
JOIN t AS s ON s.ts = t2.impressionTime 
ORDER BY completionTime DESC 

老好人SQLFiddle