sql查找表中某个字段值相同,其他字段取最大值的记录

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010955892/article/details/73497614
原文:点击打开链接
 
SELECT
	a.*
FROM
	user a
WHERE
not EXISTS(
	select 1 from user where name = a.name and age > a.age
)


 

对user表进行扫描,编号(或姓名)相同情况下,没有比前边年龄大大的数据存在,也就是取相同编号(或姓名)年份最大的一条数据。


论坛看到的一条关于类似语句的分析解释:

select * from tt t where not exists(select 1 from tt where 姓名=t.姓名 and 薪资>t.薪资 ) 

对于表tt的记录进行扫描,
对于其中任一条记录,查询相同表中相同姓名的记录,查找其中是否存在薪资>当前记录的薪资的记录,如存在,扫描到的记录即不符合条件,
如不存在,即扫描到的记录符合where的条件,将作为查询结果.
考虑最简单的情况
姓名,薪资
chen,1000    --此记录与全部chen记录1000-4000比较,2000以上>1000存在查询结果,此记录不符合where 条件
chen,2000    --此记录与全部chen记录1000-4000比较,3000以上>2000存在查询结果,此记录不符合where 条件
chen,3000    --此记录与全部chen记录1000-4000比较,4000>3000存在查询结果,此记录不符合where 条件
chen,4000    --此记录与全部chen记录1000-4000比较,没有>4000的记录,此记录符合where 条件 
最后符合条件的记录为
chen,4000
条件就是查询相同姓名 没有比查询的记录的薪资高的记录
实际结果就是薪资的最大值.

展开阅读全文

没有更多推荐了,返回首页