0

I have the following fields: user_id, app_mod, profile, update_date. The first three fields can be duplicated (i.e. two rows could have user_id, app_mod and profile equals, but different update_date):

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

How can I get the one row with higher update_date in an Oracle environment?

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同順位の場合 (つまり、2 つの行のuser_idapp_modprofile、およびが同じである場合)、分析関数は複数の行に同じランクを割り当てますupdate_daterow_number代わりに、恣意的に引き分けを使用することができます。しかし、それは通常、反復可能なプロセスではありません。オラクルは、今日は 2 つの行のうちの 1 つを選択し、明日は別の行を選択する可能性があります。最新の行以外の行を探している場合は、最新の行だけを探している場合dense_rankと同じように動作します。rank

于 2012-10-22T14:28:46.417 に答える