2012-10-22 71 views
0

我有以下字段:user_id, app_mod, profile, update_date。 前三场可以被复制(即两行可以有user_id, app_mod and profile等于,但不同的update_date):获取每组结果的最大元素

user_id app_mod profile update_date 
560047 RI03290 22809 14-GEN-10 
560047 RI03290 22809 18-GEN-10 

我怎样才能获得一个行具有较高update_date在Oracle环境?

560047 RI03290  22809 18-GEN-10 

回答

2

如果表中实际上只有4列

SELECT user_id, app_mod, profile, max(update_date) 
    FROM table_name 
GROUP BY user_id, app_mod, profile 

如果表中有其他列,以及,你不包括和不会被复制,你希望返回

SELECT * 
    FROM (SELECT a.*, 
       rank() over (partition by user_id, app_mod, profile 
           order by update_date desc) rnk 
      FROM table_name a) 
WHERE rnk = 1; 

分析功能rank将分配多行相同的排名,如果有关系(即两行具有相同的user_id,app_modprofileupdate_date)。您可以使用row_number而不是任意打破平局。但这通常不会是一个可重复的过程 - 甲骨文可能会选择今天的两排中的一排,明天另一排。如果您正在查找最近一行以外的行,那么您也可以查看dense_rank,但如果您只是查找最近一行,那么它的行为与rank的行为完全相同。