数据库排名sql,group by 分组查询按照时间最大值

时间:2022-09-16 13:09:03

先给出类似的简单表

[sql] view plain copy
  1. DROP TABLE IF EXISTS `TouTiaoAnchor`;  
  2. CREATE TABLE `TouTiaoAnchor` (  
  3.   `HourId` int(10) unsigned NOT NULL,  
  4.   `BetinTime` varchar(40) NOT NULL,  
  5.   `AnchorUid` int(11) unsigned NOT NULL,  
  6.   `ticket` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '闪耀值',  
  7.   `pic` varchar(500) DEFAULT '',  
  8.   `Info` varchar(128) NOT NULL,  
  9.   `star` int(11) NOT NULL COMMENT '星星值',  
  10.   `hitnum` int(11) NOT NULL COMMENT '连击次数,累加连续上一次,否则重新累计',  
  11.   `week` int(11) NOT NULL COMMENT '第几周',  
  12.   `flag` int(11) NOT NULL COMMENT '是否标识用来排序的。1表示用来排序的',  
  13.   PRIMARY KEY (`HourId`)  
  14. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  


目前做排行榜排行,需要按照group by进行排名,每一次排名都是按照 每一组的最开始的那条记录的字段出现,

比如,我最开始使用

[sql] view plain copy
  1. 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
  1. 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  

那这样,就解决问题了。