`

关于MYSQL中每个用户取1条记录的问题(group by xxx)

 
阅读更多

 

 昨天遇到一个问题,视频浏览历史记录,数据因需要客服统计视频播放量、播放时长以及各分类的喜好度所以播放信息要尽量的完整,但客户看到的历史又不能重复,且展示的是最后一次播放的时长以便继续观看。

数据展示如下:



 进行正常的排序分组执行sql语句:

select vpl.user_id, vc.cat_name, v.id as videoId, v.video_name as videoName ,vpl.create_time, vpl.play_times 
from zg_video_playlog vpl 
left join zg_video v on vpl.video_id=v.id 
left join zg_video_cat vc  on vc.id=v.cat_id 
group by vpl.video_id 
ORDER BY vpl.id desc 

 结果如下:



 注意:

按数据展示来看,最后一次访问的数据应为id=12的数据在第一位,且播放时间应为03-21日,明显这不是我想要的数据

 

 根据上面的分析,group by到select时只取到分组里的第一条信息。解决方案如下:

第一步:max()



 根据结果来看,我们已经拿到了最新观看的顺序,但还是有问题观看的时间还不是3-20,如果我们只要保证顺序用这个方法是完全没问题的。

第二步:

先排序,然后group,这样的话自然可以取到最适合的一条数据可以试试

select vpl.id as vplId, v.id as videoId, v.thumb, v.video_name, v.video_url, vpl.user_id, vpl.create_time , vpl.play_times as playTimes , v.look_front, v.summary
from (select * from zg_video_playlog vpl where vpl.user_id=521  order by vpl.id desc) `vpl` 
left join zg_video v on vpl.video_id=v.id
left join zg_video_cat vc  on vc.id=v.cat_id 
group by vpl.video_id 
order by vpl.id desc

 

 达到效果!

  • 大小: 8.8 KB
  • 大小: 20.1 KB
  • 大小: 21.4 KB
  • 大小: 22 KB
分享到:
评论

相关推荐

    关于MYSQL中每个用户取1条记录的三种写法(group by xxx)

    本篇文章是对MYSQL中每个用户取1条记录的三种写法进行了详细的分析介绍,需要的朋友参考下

    MySQL服务器性能优化.docx

    MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。 (8)、thread_cache_size: 可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在...

    Activiti6.0教程例子下载

    4. TaskService: 在Activiti中业务流程定义中的每一个执行节点被称为一个Task,对流程中的数据存取,状态变更等操作均需要在Task中完成。TaskService提供了对用户Task 和Form相关的操作。它提供了运行时任务查询、...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    每个实例都是经过笔者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。 本书两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;本书实例来源...

Global site tag (gtag.js) - Google Analytics