重复数据中,查询时间最近的数据
原始数据: 目的:对于每个人,仅显示时间最新的那一条记录。
select * from record as a
where not exists
(select null from record as b
where a.Name = b.Name
and a.CreateTime < b.CreateTime)
#或
select * from record as a
where not exists
(select * from record as b
where a.Name = b.Name
and b.CreateTime > a.CreateTime)
这个问题的关键难点在于,既要去除重复,又要显示多个列。这样一来distinct就无效了,groupby又无效了。
整条SQL语句的意思可以描述为,查询表a的数据,当名字相同且存在时间更加新的,则不要这条(一直排除到时间是最新的)。exists运算符,只关注子SQL有没有结果集返回,因此在exists里select * 与 select null意义一样,也就是说,如果名字相等,且有创建时间比较新的,则不要这条,直到最新的。
关联子查询只是此问题的其中一个解法,更多的解决方案在这个地址有:http://www.cnblogs.com/kissdodog/p/3365789.html