2014-12-10 3 views
6

Я работаю с данными веб-кликов, и я просто ищу последнее имя страницы с посещением user_id (по метке времени). Используя приведенный ниже код, user_id повторяется и имя_страницы с показанным, с отсортированным нисходящим. Тем не менее, мне бы хотелось, чтобы recent_click всегда = 1. Запрос, когда он будет заполнен, будет использоваться в качестве подзапроса в более крупном запросе.SQL в последнее время с использованием row_number() над разделом

Вот мой текущий код:

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

Пожалуйста, покажите образец данных @Kraut –

+2

Вы можете переместить запрос в подзапрос и добавьте 'где recent_clicks = 1'. – sgeddes

+0

@sgeddes, которые сработали. Спасибо! – jKraut

ответ

13

Вы должны быть в состоянии переместить запрос в подзапрос и добавьте where критерии:

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

Вы должны переместить функцию row_number() в подзапрос и затем отфильтруйте его во внешнем запросе.
Что-то вроде этого:

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 
Смежные вопросы