web-dev-qa-db-fra.com

SQL le plus récent utilisant row_number () sur la partition

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
10
jKraut

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
17
sgeddes

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
2
AeroX