sql获取每一个类别中值最大的一条数据

简介: sql获取每一个类别中值最大的一条数据 /* 数据如下: name val memo ...

sql获取每一个类别中值最大的一条数据




   
   
  1. /*
  2. 数据如下:
  3. name val memo
  4. a 2 a2(a的第二个值)
  5. a 1 a1--a的第一个值
  6. a 3 a3:a的第三个值
  7. b 1 b1--b的第一个值
  8. b 3 b3:b的第三个值
  9. b 2 b2b2b2b2
  10. b 4 b4b4
  11. b 5 b5b5b5b5b5
  12. */
  13. --创建表并插入数据:
  14. create table tb( name varchar( 10),val int,memo varchar( 20))
  15. insert into tb values( 'a', 2, 'a2(a的第二个值)')
  16. insert into tb values( 'a', 1, 'a1--a的第一个值')
  17. insert into tb values( 'a', 3, 'a3:a的第三个值')
  18. insert into tb values( 'b', 1, 'b1--b的第一个值')
  19. insert into tb values( 'b', 3, 'b3:b的第三个值')
  20. insert into tb values( 'b', 2, 'b2b2b2b2')
  21. insert into tb values( 'b', 4, 'b4b4')
  22. insert into tb values( 'b', 5, 'b5b5b5b5b5')
  23. go
  24. --一、按name分组取val最大的值所在行的数据。
  25. --方法1:
  26. select a.* from tb a where val = ( select max(val) from tb where name = a.name) order by a.name
  27. --方法2:
  28. select a.* from tb a where not exists( select 1 from tb where name = a.name and val > a.val)
  29. --方法3:
  30. select a.* from tb a,( select name, max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
  31. --方法4:
  32. select a.* from tb a inner join ( select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
  33. --方法5
  34. select a.* from tb a where 1 > ( select count(*) from tb where name = a.name and val > a.val ) order by a.name
  35. /*
  36. name val memo
  37. ---------- ----------- --------------------
  38. a 3 a3:a的第三个值
  39. b 5 b5b5b5b5b5
  40. */

如果上述存在一个name组中有两个以上相同的val,则查询方法1-5不正确。

例如:

insert into tb values('a',    2,   'a2(a的第二个值)') 
insert into tb values('a',    3,   'a1--a的第一个值') 
insert into tb values('a',    3,   'a3:a的第三个值') 

原文地址https://blog.csdn.net/rocling/article/details/81986581

相关文章
|
3月前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
111 4
|
4月前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
4月前
|
SQL 数据挖掘 数据库
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
|
4月前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
4月前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
779 4
|
4月前
|
SQL 关系型数据库 MySQL
SQL批量插入测试数据的几种方法?
SQL批量插入测试数据的几种方法?
336 1
|
4月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
164 0
|
4月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
71 0
|
4月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
93 0
|
4月前
|
SQL
使用SQL进行集合查询和数据维护
使用SQL进行集合查询和数据维护
63 0