我希望根据具有多个记录的每个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
谢谢
答案 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")作为列名,只会招致麻烦。