2017-07-14 35 views
1

我有我的數據如下:如何有行數相對於一個值在一組

Pagetype member_id created_at rownum  
    A   2   date   1    
    B   2   date   2    
    C   2   date   3    
    D   4   date   1    
    B   4   date   2    
    R   4   date   3    
    B   13   date   1    
    S   13   date   2    
    B   13   date   3    

而且我想另一列添加到它,如下所示:

Pagetype member_id created_at rownum DesiredRownum 
    A   2   date   1   -1 
    B   2   date   2    0 
    C   2   date   3    1 
    D   4   date   1   -1 
    B   4   date   2    0 
    R   4   date   3    1 
    B   13   date   1    0 
    S   13   date   2    1 
    B   13   date   3    2 

對於給定的member_id,只要PageType爲B,我希望將值0賦予此DesiredColumn。任何member_id的B之前的PageType的任何值應該被賦予負值,並且任何member_id的B之後的任何值PageType都應該被賦值增加正值。

我曾經讓我的數據的查詢如下:

select pagetype, 
member_id, 
created_at, 
row_number() over(partition by member_id order by created_at) 
from table 
order by member_id, 
created_at 

我怎麼這個新列添加到我的數據?

編輯:微小的變化。 PageType可以爲任何給定的用戶重複。例如,PageType B重複計算member_id 13.在這種情況下,我們希望計算出B的第一次出現的值。

回答

3

計算行數後,您可以獲得「B」的值並使用該值爲計算:

select t.*, 
     (seqnum - 
     max(case when pagetype = 'B' then seqnum end) over (partition by member_id) 
     ) as b_diff 
from (select pagetype, member_id, created_at, 
      row_number() over (partition by member_id order by created_at) as seqnum 
     from table 
    ) t 
order by member_id, created_at 
+0

我只是對這個問題稍作改動。 – Patthebug

+0

你應該問另一個問題。 –

相關問題