数据库排名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

那这样,就解决问题了。




评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值