为每个不同的列值选择第一行

lem*_*mur 0 mysql sql

有一个像这样的表 T:

 ID    DateTime   asha   
AF35   15-01-17    af   
AF35   14-01-17    la   
AF35   13-01-17    fi   
DF57   15-01-17    sk   
DF57   14-01-17    sj   
DG36   15-01-17    be   
DG36   14-01-17    dh   
Run Code Online (Sandbox Code Playgroud)

最简单的mysql查询是什么,每个返回的唯一值只有第一行ID ,并按最新的排序DateTime

我预期的结果会是这样的:

ID    DateTime   asha   
AF35   15-01-17    af     
DF57   15-01-17    sk    
DG36   15-01-17    be 
Run Code Online (Sandbox Code Playgroud)

我尝试过SELECT * FROM T GROUP BY ID ORDER BY DateTime,但是,mysql 由于没有将其他列添加到子句中而返回错误。如果我添加它们,我仍然会得到重复的 ID 结果。

Ana*_*and 6

我最喜欢的编写此查询的方法是使用 not contains 子句:

select *
from T as t1
where not exists (
    select 1 
    from T as t2 
    where t2.ID = t1.ID 
    and t2.DateTime > t1.DateTime
)
Run Code Online (Sandbox Code Playgroud)