要想取利用group by 分组后第一条记录我们就需要结合order by 来操作,原是是很利用group by 把所有分组取出来,然后来利用order by 对分组里面的数据进行desc排序取第一条就KO了.
先看看group by 语句的用法
GROUP BY 语句,GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组.
SQL GROUP BY 语法,代码如下:
- SELECTcolumn_name,aggregate_function(column_name)
- FROMtable_name
- WHEREcolumn_nameoperatorvalue
- GROUPBYcolumn_name
在SQL的 语句一起使用同样数目的SQL聚合函数提供分组的某些数据库教程表列,第结果数据集方法,实例,以下是 test 表,测试sql,代码如下:
- CREATETABLEIFNOTEXISTS`test`(
- `id`int(10)unsignedNOTNULLauto_increment,
- `install`int(10)unsignedNOTNULL,
- `day`int(10)unsignedNOTNULL,
- `aid`int(10)unsignedNOTNULL,
- PRIMARYKEY(`id`)
- )ENGINE=MyISAMDEFAULTCHARSET=utf8AUTO_INCREMENT=12;
- INSERTINTO`test`(`id`,`install`,`day`,`aid`)VALUES
- (1,'www.phpfensi.com',20120308,1),
- (2,2321,20120309,2),
- (3,1236,20120310,3),
- (5,'www.phpfensi.com',20120309,1),
- (6,2312,20120310,1),
- (7,1432,20120311,1),
- (8,2421,20120308,2),
- (9,4245,20120311,2),
- (10,'www.phpfensi.com',20120310,2),
- (11,412,20120308,3);
实现sql语句,代码如下:
- SELECTA.*FROMtestA,
- (SELECTaid,MAX(day)max_dayFROMtestGROUPBYaid)B
- WHEREA.aid=B.aidANDA.day=B.max_day
- ORDERBYa.installDESC
这样我们只要取集合的还desc排序的第一条就可以了.
再看个mssql server实例,例如 table1(a,b,c,d),代码如下:
- abcd
- 10c1d1
- 11c2d2
- 13c3d3
- 40c4d4
- 51c5d5
- 52c6d6
- 61c7d7
- 64c8d8
我要得到的是按a分组,在每个分组中取b值最大的一条记录,就是如下:
- abcd
- 13c3d3
- 40c4d4
- 52c6d6
- 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)
好了就讲这么多了,希望对大家有用.