sql问题,获取某个,算了看正文吧标题有点难起

问题

之前的需求:从下面表中拿出最新统计的结果的talk_id并且通过score的倒叙排序

我目前的做法

select xftcr.talk_id,xftcr.user_id
from xh_feeds_talk_cal_result xftcr
        -- 拿出最新统计的数据的id
       inner join (select max(id) id
                   from xh_feeds_talk_cal_result
                   group by talk_id) temp on xftcr.id = temp.id
order by xftcr.score desc;

目前做法可能出现的结果

talk_id score user_id
1 100 1
2 90 1
3 88 1
4 70 2
5 60 3

新增的需求
相同user_id只能出现两次并且是score最高的两次

需要的结果如下,具体要怎么解决没什么思路

talk_id score user_id
1 100 1
2 90 1
4 70 2
5 60 3

表信息

xh_feeds_talk_cal_result表是保存定时任务统计的结果

CREATE TABLE `xh_feeds_talk_cal_result` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `talk_id` int(11) NOT NULL COMMENT 'talk id',
  `user_id` int(11) NOT NULL COMMENT '发布话题的用户id',
  `view_count` int(11) NOT NULL COMMENT 'view统计',
  `total_like` int(11) DEFAULT NULL COMMENT 'like统计',
  `total_comment` int(11) NOT NULL COMMENT 'comment统计',
  `medias_count` int(11) DEFAULT NULL COMMENT '媒体统计',
  `talk_create_time` int(11) NOT NULL COMMENT '话题创建时间',
  `view_weight` int(11) NOT NULL COMMENT 'view权重',
  `like_weight` int(11) NOT NULL COMMENT 'like权重',
  `comment_weight` int(11) NOT NULL COMMENT 'medias权重',
  `media_weight` int(11) NOT NULL COMMENT '媒体权重',
  `create_time_weight` int(11) NOT NULL COMMENT '创建时间权重',
  `create_time` int(11) DEFAULT NULL COMMENT '创建时间',
  `score` int(11) NOT NULL COMMENT '最终得分',
  PRIMARY KEY (`id`),
  KEY `xh_feeds_talk_cal_result_talk_id_index` (`talk_id`),
  KEY `xh_feeds_talk_cal_result_user_id_index` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3001 DEFAULT CHARSET=utf8 COMMENT='话题feeds流推荐统计表v1'

可以看看这个思路
好像还挺难得

1 个赞