根据具有多个记录的id显示最大值(日期)

时间:2016-10-12 10:38:17

标签: database oracle

我希望根据具有多个记录的每个id显示基于max(日期)的所有记录。例如,如果id = 1有5条记录,id = 2有三条记录。我只想显示所有具有max(date)的记录。

id       date             name   
1        15-sep-2016      hari
1        15-oct-2017      raj
1        15-sep-2015      xyz
2        14-aug-2017      abc
2        14-jun-2016      123
3        19-aug-2016      789
3        17-aug-2015      fff

我想显示如下所示的记录

id       date             name   
1        15-oct-2017      raj
2        14-aug-2017      abc
3        19-aug-2016      789

谢谢

4 个答案:

答案 0 :(得分:2)

一种方法可能如下:

select *
from (
        select id, name, "date", row_number() over(partition by id order by "date" desc) as RN
        from yourTable
     )
where RN = 1 

内部查询根据date desc计算每行的rownumber;外部的一个只是给第一个位置的日期行,即date的每个值的最大id行。

顺便说一句,您最好避免使用date这样的保留字作为列

答案 1 :(得分:0)

select id, date_field, name from your_table_name primary_table where date_field = (
    SELECT MAX(date_field) from your_table_name AS secondary_table where primary_table.id = secondary_table.id GROUP BY secondary_table.id
) GROUP BY primary_table.id order by primary_table.id

在上面的查询' your_table_name'是您的表的名称,date_field是您的表的日期列的列名,您需要在该列上找到每个用户的最大日期。

答案 2 :(得分:0)

with max_dt
as 
(
select t1.*
,dense_rank() over (partition by id order by date desc )  rnk
from table1 t1
 )
 select id,date,name  from max_dt
 where rnk=1

答案 3 :(得分:0)

无需子查询即可解决此类要求:

select id, max(dt) as dt, 
           max(name) keep (dense_rank last order by dt) as name
from   table_name
group by id
order by id;

不要使用保留字(" date")作为列名,只会招致麻烦。