2014-02-17 20 views
1

我有下表。我需要獲得倒數第二個事件相關聯的每個事件如何提煉最後一個?

event_id event_date event_associate 
1   2/14/2014 ben 
1   2/15/2014 ben 
1   2/16/2014 steve 
1   2/17/2014 steve // this associate is the last but one for event 1 
1   2/18/2014 paul 
2   2/19/2014 paul 
2   2/20/2014 paul // this associate is the last but one for event 2 
2   2/21/2014 ben 
3   2/22/2014 paul 
3   2/23/2014 paul 
3   2/24/2014 ben 
3   2/25/2014 steve // this associate is the last but one for event 3 
3   2/26/2014 ben 

我需要找出誰是最後一個,但每個事件一個event_associate。結果應該是

event_id  event_associate 
1    steve  
2    paul 
3    steve 

我知道,爲了做到這一點,我需要最大化EVENT_DATE和排除最後event_associate

所以,我想

SELECT event_id , event_associate 
WHERE NOT EXISTS (
SELECT * 
FROM mytable 
WHERE event_date = MAX(event_date) 
) 
QUALIFY ROW_NUMBER() OVER (PARTITION BY event_id ORDER BY event_date DESC) = 1 

但在這種情況下,我不知道如何使用EXISTS

回答

2

你是相當接近,你只需要根據ROW_NUMBER第二行:

select t.*, 
    row_number() 
    over (partition by event_id 
     order by event_date desc) 
from tab as t 
qualify 
    row_number() 
    over (partition by event_id 
     order by event_date desc) = 2 
-- or simply 
-- qualify rn = 2 
+0

謝謝。我如何獲得select中的row_number? 'select *,row_number()...'我試過它不起作用 –

+0

當然這有效。你的錯誤是什麼? – dnoeth

+0

哦,我明白了。你需要使用別名,我修改了我的答案。 – dnoeth

相關問題