我正在尝试使Teradata SQL查询返回每个用户的按时间顺序访问日期 n。例如,Teradata结果中的第n项结果
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
我想是这样的下方,但Teradata的尖叫着说,“有序分析功能在WHERE
条款允许的。”我拉了一段时间的头发,但没有取得多大进展。任何人看到这个?
select user,
row_number() over (partition by user order by visit_date desc) as rnum
from visitstable
where rnum = 2
如果我排除where
那么我的结果看起来很有希望...我只是不能提取我所需要的!
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
在此先感谢您的帮助!
谢谢,亚当。 TD不喜欢第一种解决方案。 “QUALIFY BY ROW_NUMBER()”中的“BY”必须去。 第二个让我的大脑发出嘶嘶声,这在星期五的早晨很棒。谢谢! – Chris 2010-07-09 15:33:42
糟糕,关于'BY'错字。我现在编辑了,谢谢。第二个示例是一个可用于主查询的临时表。一旦我结束语法,我注意到通过简单地将现有查询的第一步移动到'WITH'子句中,可以获得巨大的性能提升。祝你好运。 – bernie 2010-07-09 15:44:23