本文章来给大家介绍在于mysql中利用分组group by排序来实现获取记录组中时间最大的记录实现方法,各位朋友可参考.
mysql 分组 group by,排序 取每条记录中,时间最大的一条记录,以下是 test 表,测试sql,代码如下:
- CREATE TABLE IF NOT EXISTS `test` (
- `id` int(10) unsigned NOT NULL auto_increment,
- `install` int(10) unsigned NOT NULL,
- `day` int(10) unsigned NOT NULL,
- `aid` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;
-
- INSERT INTO `test` (`id`, `install`, `day`, `aid`) VALUES
- (1, 1232, 20080808, 1),
- (2, 2321, 20080809, 2),
- (3, 1236, 20080810, 3),
- (5, 4212, 20080809, 1),
- (6, 2312, 20080810, 1),
- (7, 1432, 20080811, 1),
- (8, 2421, 20080808, 2),
- (9, 4245, 20080811, 2),
- (10, 5654, 20080810, 2),
- (11, 412, 20080808, 3);
sql语句,代码如下:
- SELECT A.* FROM test A,
- (SELECT aid, MAX(day) max_day FROM test GROUP BY aid) B
- WHERE A.aid = B.aid AND A.day = B.max_day
- ORDER BY a.install DESC
我们也可以使用group by 来实例记录统计.
方法1:使用GROUP BY,代码如下:
SQL Query
SELECT COUNT(*) FROM `prince` GROUP BY `mother` > 24;
执行结果:
count(*)
50029
49971
在100,000行数据上的运行时间:0.0335 秒
分析:这种GROUP BY方法的最大问题在于,无法区分所得到的结果,这两个数字哪一个是天宫娘娘们所生的皇子数,哪一个是地宫娘娘们所生的皇子数呢?不知道,所以,尽管它统计出了总数,但是没有什么意义.
因此,为了区分统计结果,必须要把条件 mother > 24 也作为一个字段在结果集中作为一个字段体现出来,修改后的sql如下:
- SELECT COUNT(*) AS `number`, `mother` > 24 AS `type` FROM `prince` GROUP BY `mother` > 24;
-
- number type
- 50029 0
- 49971 1
条件表达式作为字段时,该字段的值就是该条件表达式的值,因此,对应我们的例子,type = 1 也就是表示 mother > 24 的值为1,因此,第二行中的数字代表地宫娘娘们所生的皇子数.
经过修改后,我们看出,天宫娘娘们略胜一筹. |