2015-09-23 48 views
3

我在Redshift中有一個基於事件的表格。我想要將所有事件與系列中的FIRST事件綁定在一起,前提是該事件在此事件之前的N小時內進行。我可以在Redshift的窗口函數中添加一個條件嗎?

如果我所關注的是非常第一排,我想簡單地做:

SELECT 
    event_time 
    ,first_value(event_time) 
     OVER (ORDER BY event_time rows unbounded preceding) as first_time 
FROM 
    my_table 

但因爲我只想在過去N個小時,以配合這第一個事件,我想要類似於:

SELECT 
    event_time 
    ,first_value(event_time) 
     OVER (ORDER BY event_time rows between [N-hours ago] and current row) as first_time 
FROM 
    my_table 

在我桌子上的一點背景。這是用戶操作,因此用戶跳轉,執行1-100個操作,然後離開。大多數用戶每天都有1-10x。會議很少會持續一個小時,所以我可以設置N = 1。

如果我只是設置了一個PARTITION BY date_trunc('hour',event_time),那麼我將爲跨越一小時的會話創建兩倍。

假設MY_TABLE模樣

id | user_id | event_time 
---------------------------------- 
1 | 123 | 2015-01-01 01:00:00 
2 | 123 | 2015-01-01 01:15:00 
3 | 123 | 2015-01-01 02:05:00 
4 | 123 | 2015-01-01 13:10:00 
5 | 123 | 2015-01-01 13:20:00 
6 | 123 | 2015-01-01 13:30:00 

我的目標是獲得一個結果,看起來像

id | parent_id | user_id | event_time 
---------------------------------- 
1 | 1  | 123 | 2015-01-01 01:00:00 
2 | 1  | 123 | 2015-01-01 01:15:00 
3 | 1  | 123 | 2015-01-01 02:05:00 
4 | 4  | 123 | 2015-01-01 13:10:00 
5 | 4  | 123 | 2015-01-01 13:20:00 
6 | 4  | 123 | 2015-01-01 13:30:00 
+0

所以你的問題是*不*如何把一個條件的窗口函數,但如何計算與postges會話,對不對?這是回答。現在找不到它。 – usr

+0

你可以發表表格的樣本數據及其關係嗎?你怎麼需要這些數據? – Viki888

回答

相關問題