我正在嘗試使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