问题
之前的需求:从下面表中拿出最新统计的结果的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'