2016-10-12 47 views
-1

我想基于每个具有多个记录的ID显示基于max(日期)的所有记录。例如,如果id = 1有5条记录,id = 2有3条记录。我只想显示所有有最大(日期)的记录。根据具有多个记录的ID显示最大值(日期)

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 

谢谢

+1

在这里你可以找到关于[问]和如何建立[mcve]的东西来提高你的问题 – Aleksej

回答

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是列名您需要查找每个用户的最大日期的表格日期列。

+0

我得到以下错误“ORA-00979:不是GROUP BY表达式 00979. 00000 - 不是GROUP BY表达式“ –

+0

谢谢。它的工作.. –

+0

我已经添加了mysql查询,如果你需要查询oracle,那么你需要改变它...谢谢... –

2

的一种方式可能是以下几点:

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

内查询计算每一行的ROWNUMBER,基于date desc;外部人只需在第一个位置输入日期,即对于id的每个值,最大为date的行。

顺便说一句,你最好避免使用保留字,如date为您列

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 
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; 

不要使用保留单词(“日期”)列名,只会引起麻烦。

相关问题