J'essaie de faire une requête SQL Teradata qui renverra la n -th date de visite chronologique pour chaque utilisateur. Par exemple,nième résultat dans le résultat Teradata
user | visit_date
---------------------
a 1/1
b 1/10
c 1/20
a 1/3
a 1/4
b 1/5
c 1/15
b 1/9
> magic_query_for_Second_visit;
user | second
------------------
a 1/3
b 1/9
c 1/20
J'ai essayé quelque chose comme ci-dessous, mais Teradata hurlèrent que « les fonctions d'analyse commandés ne sont pas autorisés dans WHERE
clause. » Je me suis tiré les cheveux pendant un moment mais je ne fais pas beaucoup de progrès. Quelqu'un a vu ça?
select user,
row_number() over (partition by user order by visit_date desc) as rnum
from visitstable
where rnum = 2
Si je le where
alors exclure mon résultat semble prometteur ... Je ne peux pas extraire ce que je dois!
user | visit_date | rnum
---------------------------
a 1/1 1
a 1/3 2
a 1/4 3
b 1/5 1
b 1/9 2
b 1/10 3
c 1/15 1
c 1/20 2
Merci d'avance pour l'aide!
Merci, Adam. TD n'a pas aimé la première solution. Le "BY" dans 'QUALIFY BY ROW_NUMBER()' a dû partir. Le 2ème fait grésiller mon cerveau, ce qui est génial un vendredi matin. Merci! – Chris
Oups, désolé pour la faute de frappe «BY». Je l'ai maintenant édité, merci. Le second exemple est une table temporaire mise à la disposition de votre requête principale. Une fois la syntaxe passée, j'ai remarqué d'énormes gains de performance en déplaçant simplement la première étape d'une requête existante vers la clause 'WITH'. Bonne chance à vous. – bernie