为每个ROW选择MAX值 - Oracle Sql

时间:2017-09-25 13:41:54

标签: sql oracle greatest-n-per-group

我有一个疑问。 我需要找到特定客户列表的最新情况,让我们说简化,我需要3个客户中的100个。 我需要检查他们每个人最后一次获得奖金的时间。 该表将是:

EVENT_TBL

字段:Account IDEVENT_DATEBONUS ID,....

你能建议一种方法来获取最新的(MAXEVENT DATE(这意味着每行一行)

我使用SELECT...IN指定了帐户ID,但不确定如何使用MAXGroup BY等等(如果需要)。

2 个答案:

答案 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

答案 1 :(得分: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)