先给出类似的简单表
[sql] view plain copy
- DROP TABLE IF EXISTS `TouTiaoAnchor`;
- CREATE TABLE `TouTiaoAnchor` (
- `HourId` int(10) unsigned NOT NULL,
- `BetinTime` varchar(40) NOT NULL,
- `AnchorUid` int(11) unsigned NOT NULL,
- `ticket` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '闪耀值',
- `pic` varchar(500) DEFAULT '',
- `Info` varchar(128) NOT NULL,
- `star` int(11) NOT NULL COMMENT '星星值',
- `hitnum` int(11) NOT NULL COMMENT '连击次数,累加连续上一次,否则重新累计',
- `week` int(11) NOT NULL COMMENT '第几周',
- `flag` int(11) NOT NULL COMMENT '是否标识用来排序的。1表示用来排序的',
- PRIMARY KEY (`HourId`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
目前做排行榜排行,需要按照group by进行排名,每一次排名都是按照 每一组的最开始的那条记录的字段出现,
比如,我最开始使用
[sql] view plain copy
- select AnchorUid,pic,SUM(star)as starNum,BetinTime from TouTiaoAnchor GROUP BY AnchorUid ORDER BY starNum DESC,BetinTime asc LIMIT 0,3
这个时候的betintIme 都是使用的是第一条记录的时间,但是,我是想使用最新的那条记录的时间
所以,完全达不到我的想要的。
经过分析,group by 是出现第一条的的数据。因此,那我就给他倒过来 在来一次。
这个时候,就要使用重新来个表。
[sql] view plain copy
- select AnchorUid,pic,SUM(star)as starNum,BetinTime from (select * from TouTiaoAnchor ORDER BY BetinTime DESC ) tt GROUP BY AnchorUid ORDER BY starNum DESC,BetinTime asc LIMIT 0,3
那这样,就解决问题了。