1. 程式人生 > >資料庫排名sql,group by 分組查詢按照時間最大值

資料庫排名sql,group by 分組查詢按照時間最大值

先給出類似的簡單表

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進行排名,每一次排名都是按照 每一組的最開始的那條記錄的欄位出現,

比如,我最開始使用

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 是出現第一條的的資料。因此,那我就給他倒過來 在來一次。

這個時候,就要使用重新來個表。

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

那這樣,就解決問題了。