2017-09-25 42 views
1

我有一個疑問。 我需要找出特定客戶列表的最新發生情況,我們假設爲了簡化,我需要爲100個客戶提供100個。 我需要檢查每次最後一次獲得獎金的時間。 該表將是:爲每個行選擇最大值 - Oracle Sql

EVENT_TBL 

領域:Account IDEVENT_DATEBONUS ID,....

您能否提供一個方法來獲取最新的(MAXEVENT DATE(這意味着每行顯示一個)

我使用SELECT...IN來指定帳戶ID,但不知道如何使用MAXGroup BY等等(如果有需要的話)。

+0

示例代碼和預期的效果? –

回答

4

使用ROW_NUMBER()解析函數:

SELECT * 
FROM (
    SELECT t.*, 
     ROW_NUMBER() OVER (PARTITION BY Account_id ORDER BY event_date DESC) AS rn 
    FROM EVENT_TBL t 
    WHERE Account_ID IN (123, 456, 789) 
) 
WHERE rn = 1 
+0

它返回:「無效標識符」 –

+1

@MorganForever是否包含「AS rn」部分? – MT0

0

您可以嘗試

with AccountID_Max_EVENT_DATE as (
select AccountID, max(EVENT_DATE) MAX_D 
from EVENT_TBL 
group by AccountID 
) 
SELECT E.* 
FROM EVENT_TBL E 
INNER JOIN AccountID_Max_EVENT_DATE M 
ON (E.AccountID = M.AccountID AND M.MAX_D = E.EVENT_DATE) 
+0

這使用自連接並可能需要兩次表掃描。並且,如果有多個條目具有相同(最長)日期那麼這將返回多個行每個帳戶。 – MT0

+0

是的,非常感謝! –