重复数据中,查询时间最近的数据

原始数据: SQL复杂语句 - 图1目的:对于每个人,仅显示时间最新的那一条记录。

  1. select * from record as a
  2. where not exists
  3. (select null from record as b
  4. where a.Name = b.Name
  5. and a.CreateTime < b.CreateTime)
  6. #或
  7. select * from record as a
  8. where not exists
  9. (select * from record as b
  10. where a.Name = b.Name
  11. and b.CreateTime > a.CreateTime)

这个问题的关键难点在于,既要去除重复,又要显示多个列。这样一来distinct就无效了,groupby又无效了。
整条SQL语句的意思可以描述为,查询表a的数据,当名字相同且存在时间更加新的,则不要这条(一直排除到时间是最新的)。exists运算符,只关注子SQL有没有结果集返回,因此在exists里select * 与 select null意义一样,也就是说,如果名字相等,且有创建时间比较新的,则不要这条,直到最新的。

关联子查询只是此问题的其中一个解法,更多的解决方案在这个地址有:http://www.cnblogs.com/kissdodog/p/3365789.html