2017-02-15 30 views
0

如果我真的試圖塞滿它所有在那裏,但這裏是我需要幫助...在紅移,我怎樣才能使用窗口函數分配一個計數到上一行的日期

我們正在努力計算用戶的保留率。我們的用戶有可能重疊的作業開始日期和作業結束日期。我需要做的是查看所有候選人的任務,並確定他們是否被保留(在上一次結束和新開始之間30天或更短)。棘手的部分:我需要將保留信用分配給以前的分配結束日期。這裏的數據的預覽:

month | user_id | start_date | end_date | rank | days_btw_assignment 
    1  5  1-1-16  1-31-16  1  NULL 
    2  5  2-14-16  4-15-16  2  15 
    6  4  6-01-16 11-01-16  1  NULL 
    8  4  8-01-16 11-01-16  2  -81 

因此,對於用戶5,我需要,因爲他們的任務結束日期爲止16年1月31日給滯留的信貸一月至16' 月。對於用戶4,如果任務重疊,我會給予nov-16的保留權,因爲他們以前的任務結束日期將於11-01-16結束。

我已經限制了這個例子使用的情況下,他們只有2個任務,但是,可能會有更多。我只需要朝正確的方向邁出一步,我可以自己處理所有其他用例。

這裏是我目前使用的示例代碼:

with placement_facts as (select date_trunc('month',assignment_start_date) as month, user_id, assignment_start_date, assignment_end_date, rank() over (partition by user_id order by assignment_start_date asc), extract(day from assignment_start_date - lag(assignment_end_date, 1) over (partition by user_id order by assignment_start_date asc)) as time_btw_placement 
from activations as ca 
join offers on ca.offer_id = offers.id 
where assignment_start_date != assignment_end_date 
order by 2,4 asc) 
select placement_facts.month, count(distinct case when time_btw_placement <=30 then user_id else null end) as retained_raw 
from placement_facts 
group by 1; 

欣賞的幫助,並請LMK如果我的東東澄清什麼!

+0

請分享樣品數據和需求輸出.. –

回答

0

如果我理解你的問題,那麼我認爲你可以用LAG()替換LEAD()來達到你想要的效果。它基本上是相同的功能,但它在前面查看給定數量的行

相關問題