2014-12-10 18 views
6

kullanıyorum Bazı web tıklamaları verileriyle çalışıyorum ve yalnızca ziyaret edilen user_id ile bir en son page_name'i arıyorum (bir zaman damgasıyla). Aşağıdaki kodu kullanarak, user_id tekrarlanır ve sırayla azalan şekilde gösterildiği şekilde page_name. Ancak, her zaman son_click'i isterim. 1. Tamamlandığında, sorgu daha büyük bir sorguda bir alt sorgu olarak kullanılacaktır. İşte SQL en son row_number() bölümleme üzerinde

benim geçerli kod:

SELECT user_id, 
page_name, 
row_number() over(partition by session_id order by ts desc) as recent_click 
from clicks_data; 

user_id | page_name | recent_click 
--------+-------------+-------------- 
0001 | login  | 1 
0001 | login  | 2 
0002 | home  | 1 
+0

Bir alt sorgu Sorgunuzu taşımak ve 'nerede recent_clicks = 1' ekleyebilir –

+2

@Kraut örnek verileri gösterin. Çalışılan – sgeddes

+0

@sgeddes. teşekkür ederim! – jKraut

cevap

13
Bir alt sorgu için sorgu taşımak ve where ölçüt eklemek mümkün olmalıdır

: Bir alt sorgu içine row_number() fonksiyonunu hareket etmelidir

SELECT user_id, page_name, recent_click 
FROM (
    SELECT user_id, 
     page_name, 
     row_number() over (partition by session_id order by ts desc) as recent_click 
    from clicks_data 
) T 
WHERE recent_click = 1 
2

ve daha sonra dış sorguya filtreleyin. Böyle
şey:

SELECT * FROM (
    SELECT 
     [user_id] 
     ,[page_name] 
     ,ROW_NUMBER() OVER (PARTITION BY [session_id] 
          ORDER BY [ts] DESC) AS [recent_click] 
    FROM [clicks_data] 
)x 
WHERE [recent_click] = 1