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
4

1 回答 1

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它来任意打破平局。但这通常不是一个可重复的过程——Oracle 可能会在今天选择两行之一,明天再选择另一行。如果您正在查找除最近行之外的行,您可能还会查看,dense_rank但这与rank您仅查找最近行时的行为相同。

于 2012-10-22T14:28:46.417 回答