2017-09-25 41 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

是的,非常感谢! –