引言:
为什么会引入这个问题,在程序中遇到这样的问题,在某个数据表中,相同的AID(项目ID)被多次添加到数据表中,所以对应于不同的时间,只想选取添加时间最早的哪一条记录。
参考:红黑联盟
所用到的数据表:
想实现的效果:
解释:相同的ID,由不同的人(Name)添加,我们选取值最小(Val)的那一行记录。
方法如下:
方法一:
1 select a.* from T1 a , 2 (select id,min(val) as val from T1 group by id) b 3 where a.ID=b.ID and a.Val=b.val
方法二:
1 select a.* from T1 a 2 inner join 3 (select id,min(Val) as val from T1 group by id) b 4 on a.id=b.id and a.Val=b.val
说明:方法一与方法二的作用相同,并没有区别,只不过where是隐式链接,inner join是显式链接,where逐步被边缘化。
方法三:
1 select a.* from T1 a 2 where a.val=(select min(Val) from T1 where ID=a.ID)
ID相同,取最小的Val值。
方法四:
1 select a.* from T1 as a where not exists (select * from T1 b where b.Val<a.Val and b.ID=a.ID)
拓展:还是按照字段分组,选择第一条出现的数据:
想实现的效果:
方法:
select a.* from T1 as a where val=(select top 1 Val from T1 b where a.ID=b.ID)