2016-12-02 51 views
0

我有这样的一个表:选择具有一个最大日两个不同的列

ID DATE  TableName 
X 29-Jan-12 A 
X 29-Feb-12 B 
X 29-Jan-12 C 
Y 18-Nov-12 A 
Z 18-Nov-14 C 
X 17-Nov-13 D 
Z 14-May-12 A 
Y 18-Nov-13 D 

我想MAXDATE获取唯一的ID,这样的输出应该像这个 -

ID DATE TableName 
Z 18-Nov-14 C 
Y 18-Nov-13 D 
X 17-Nov-13 D 

我使用select ID, MAX(DATE), TableName from table但这并不能给我所需的输出。

+0

什么是您正在使用的RDBMS? –

+0

这里的课程:如果您没有选择正确的数据库产品,那么另一个产品专家的人可能会关闭您的问题。 @Barmar关闭了这个问题,并链接到一个特定于MySQL的较旧的问题;在那个较老的问题中没有显示Oracle(例如)中存在但不存在于MySQL中的答案,但是谁在乎。很明显,不是Barmar。 – mathguy

+0

这是一个Oracle重复:http://stackoverflow.com/questions/121387/fetch-the-row-which-has-the-max-value-for-a-column?rq=1 – Barmar

回答

1

可以在条款上通过 子选择组如果您使用的是分贝,允许使用一个元组

select id, date, tableName 
from my_table 
where (id, date) in (select id, max(date) 
        from my_table 
        group by id); 

,或者如果DB不允许元组,你可以使用一个内连接

select id, date, tableName 
from my_table a 
inner join (select id, max(date) max_date 
        from my_table 
        group by id) t on t.id = a.id and t.max_date = a.date; 
1

甲骨文答案:

你所缺的是拿起那肺心病tablename对每组内的max(date)作出响应。

即与keep (dense_rank last...)最高效地完成像这样:(注 - DATE是Oracle的保留字,所以我希望你的列名不DATE和你使用的只是作为一个占位符......)

select id, max(date) as date, 
     max(tablename) keep (dense_rank last order by date) as tablename 
from  table_like_this 
group by id; 

Oracle文档(用于FIRST,但是读取文本,它也指LAST) https://docs.oracle.com/cloud/latest/db112/SQLRF/functions065.htm#SQLRF00641

相关问题