提问者:小点点

为每个不同的列值选择第一行[重复]


有一个这样的表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   

什么是最简单的mysql查询,只有第一行为每个唯一的ID返回,由最近的DateTime排序?

我的预期结果是这样的:

ID    DateTime   asha   
AF35   15-01-17    af     
DF57   15-01-17    sk    
DG36   15-01-17    be 

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


共2个答案

匿名用户

我最喜欢的编写此查询的方法是使用不存在子句:

select *
from T as t1
where not exists (
    select 1 
    from T as t2 
    where t2.ID = t1.ID 
    and t2.DateTime > t1.DateTime
)

匿名用户

按ID顺序按日期描述从T组中选择Distinct(ID)、DateTime、asha

使用上述查询可以创建唯一的Id记录。