2014-12-10 3 views
6

Ich arbeite mit einigen Web-Klicks Daten, und bin nur auf der Suche nach dem letzten page_name mit der user_id besucht (von einem Zeitstempel). Unter Verwendung des folgenden Codes wird die Benutzer-ID wiederholt und Seitenname mit angezeigt, mit absteigender Sortierung. Ich möchte jedoch nur request_click immer = 1. Die Abfrage, wenn sie abgeschlossen ist, wird als Unterabfrage in einer größeren Abfrage verwendet.SQL zuletzt mit row_number() über Partition

Hier ist meine aktuellen Code:

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

Bitte zeigen Beispieldaten @Kraut –

+2

Sie können Ihre Abfrage in einer Unterabfrage, und fügen Sie 'wo recent_clicks = 1 'bewegen. – sgeddes

+0

@sgeddes, das hat funktioniert. Danke! – jKraut

Antwort

13

Sie sollten where Kriterien der Lage sein, Ihre Anfrage an eine Unterabfrage bewegen und fügen:

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

Sie sollten die row_number() Funktion in eine Unterabfrage bewegen und dann filtern Sie es in der äußeren Abfrage.
Etwas wie folgt aus:

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