Je travaille avec des données de clics sur le Web et je recherche simplement le nom de page le plus récent avec l'ID utilisateur visité (par un horodatage). En utilisant le code ci-dessous, l'utilisateur_id est répété et page_name avec affiché, avec un tri décroissant. Cependant, je voudrais juste que recent_click soit toujours = 1. La requête une fois terminée sera utilisée comme sous-requête dans une requête plus grande.
Voici mon code actuel:
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
Vous devriez pouvoir déplacer votre requête vers une sous-requête et ajouter des critères 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
Vous devez déplacer la fonction row_number()
dans une sous-requête, puis la filtrer dans la requête externe.
Quelque chose comme ça:
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