sql分组取最大记录方法

互联网十八般武艺 互联网十八般武艺

要想取利用group by 分组后第一条记录我们就需要结合order by 来操作,原是是很利用group by 把所有分组取出来,然后来利用order by 对分组里面的数据进行desc排序取第一条就KO了.

先看看group by 语句的用法

GROUP BY 语句,GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组.

SQL GROUP BY 语法,代码如下:

  1. SELECTcolumn_name,aggregate_function(column_name)
  2. FROMtable_name
  3. WHEREcolumn_nameoperatorvalue
  4. GROUPBYcolumn_name

在SQL的 语句一起使用同样数目的SQL聚合函数提供分组的某些数据库教程表列,第结果数据集方法,实例,以下是 test 表,测试sql,代码如下:

  1. CREATETABLEIFNOTEXISTS`test`(
  2. `id`int(10)unsignedNOTNULLauto_increment,
  3. `install`int(10)unsignedNOTNULL,
  4. `day`int(10)unsignedNOTNULL,
  5. `aid`int(10)unsignedNOTNULL,
  6. PRIMARYKEY(`id`)
  7. )ENGINE=MyISAMDEFAULTCHARSET=utf8AUTO_INCREMENT=12;
  8. INSERTINTO`test`(`id`,`install`,`day`,`aid`)VALUES
  9. (1,'www.phpfensi.com',20120308,1),
  10. (2,2321,20120309,2),
  11. (3,1236,20120310,3),
  12. (5,'www.phpfensi.com',20120309,1),
  13. (6,2312,20120310,1),
  14. (7,1432,20120311,1),
  15. (8,2421,20120308,2),
  16. (9,4245,20120311,2),
  17. (10,'www.phpfensi.com',20120310,2),
  18. (11,412,20120308,3);

实现sql语句,代码如下:

  1. SELECTA.*FROMtestA,
  2. (SELECTaid,MAX(day)max_dayFROMtestGROUPBYaid)B
  3. WHEREA.aid=B.aidANDA.day=B.max_day
  4. ORDERBYa.installDESC

这样我们只要取集合的还desc排序的第一条就可以了.

再看个mssql server实例,例如 table1(a,b,c,d),代码如下:

  1. abcd
  2. 10c1d1
  3. 11c2d2
  4. 13c3d3
  5. 40c4d4
  6. 51c5d5
  7. 52c6d6
  8. 61c7d7
  9. 64c8d8

我要得到的是按a分组,在每个分组中取b值最大的一条记录,就是如下:

  1. abcd
  2. 13c3d3
  3. 40c4d4
  4. 52c6d6
  5. 64c8d8

方法一,代码如下:

select * from table1 where b in (select max(b) from table1 group by a) ;

方法二,代码如下:

select * from table1 a where b=(select max(b) from table1 where a=a.a)

好了就讲这么多了,希望对大家有用.

相关广告
  • sql分组取最大记录方法 sql分组取最大记录方法 sql分组取最大记录方法
相关阅读

sql分组取最大记录方法

2019/10/10 17:33:17 | 谷歌SEO算法 | SEO优化