选择两个具有一个最大日期的不同列

Selecting two distinct column with one max date

我有一个 table 这样的:

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,但这并没有给我想要的输出。

您可以在子选择组上使用 in 子句 如果您使用的数据库允许元组

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

或者如果数据库不允许元组,您可以使用内部联接

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;

甲骨文答案:

您缺少的是拾取与每个组中的 max(date) 相对应的 tablename

使用 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