2014-12-10 8 views
6

Pracuję z danymi niektórych kliknięć internetowych i szukam tylko najnowszej nazwa_strony z odwiedzoną wizytą użytkownika (według znacznika czasu). Używając poniższego kodu, id_użytkownika jest powtarzany i nazwa_strony z pokazaną, z posortowanym maleństwem. Jednak chciałbym recent_click always = 1. Zapytanie po zakończeniu będzie używane jako podzapytanie w większym zapytaniu.SQL najnowszy za pomocą row_number() na partycji

Tu jest mój bieżący 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

Proszę pokazać przykładowe dane @Kraut –

+2

Można przenieść zapytanie do podzapytania i dodać 'gdzie recent_clicks = 1 '. – sgeddes

+0

@sgeddes, który działał. Dziękuję Ci! – jKraut

Odpowiedz

13

Powinieneś być w stanie poruszać zapytanie do podzapytania i dodać where kryteria:

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

Należy przenieść funkcję row_number() do podzapytania i następnie odfiltruj go w zapytaniu zewnętrznym.
coś takiego:

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