`

关于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中,有时候我们需要从一个表中为每个用户获取一条记录,这通常涉及到对数据进行分组并选择每个组中的特定记录。以下是对三种不同方法的详细解释,这些方法可以帮助你在MySQL中实现这一目标。 **1. 先排序后...

    Mysql删除重复数据保留最小的id 的解决方法

    在MySQL数据库管理中,有时我们需要清理表中的重复数据,但同时希望保留每个唯一标识符(如`peopleName`)下的最小`peopleId`。这里提到的解决方案是通过使用子查询来实现这一目标,但该过程可能会遇到一些挑战。...

    sql操作语句[参考].pdf

    在MySQL中的goods例子中,`SELECT gperson, COUNT(*) FROM goods GROUP BY gperson`会返回每个gperson及其对应的商品数量。 2. **状态字段**: 设置一个State字段来标记数据的状态,如State=1表示有效,State=0...

    MySQL数据表合并去重的简单实现方法

    为了去除重复项,我们可以创建一个新的临时表`tmp`,并使用`GROUP BY`语句来根据`no`字段进行分组,这样每个`no`值只会出现一次: ```sql create table tmp select id,no from pep group by no; ``` 但在此过程中...

    使用MySQL MySqldump命令导出数据时的注意事项

    此外,`mysqldump`还提供了许多其他选项,如`--add-locks`在每个表导出前锁定表,`--add-drop-table`在每个`CREATE TABLE`语句前添加`DROP TABLE`,`--compress`在客户端和服务器之间压缩数据,以及`--delayed`使用`...

    设置MySQL中的数据类型来优化运行速度的实例

    在MySQL中,对于`VARCHAR`类型,索引存储不仅包括实际字符,还包括每个字符的长度字节(1到2字节,取决于字符集)。因此,即使`client_id`仅存储5-15个字节,索引也会占用比实际数据更多的空间。在本例中,如果`...

    SQL 语法

    `NOT NULL`表示该字段不允许为空,`PRIMARY KEY`定义了主键,用于唯一标识每条记录。 2. 修改表: 修改表结构包括添加新字段、改变主键等。 ```sql ALTER TABLE table_name ADD COLUMN column_name datatype; ...

    MySQL按时间统计数据的方法总结

    在MySQL中,处理时间日期的函数非常丰富,其中`DATE_FORMAT(date, format)`是一个常用的函数,用于按照指定的格式展示日期和时间。以下是一些常用的格式化参数: - `%a`:缩写星期名 - `%b`:缩写月名 - `%c`:月,...

    MySQL 视图的基础操作(五)

    - **聚合函数视图**:视图的查询结果是聚合函数计算的结果,例如,统计每个组的学生人数: ```sql CREATE VIEW view_student_count AS SELECT t_group.NAME, COUNT(*) AS student_num FROM t_student JOIN t_...

    Activiti6.0教程例子下载

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

    数据库开发规范

    - 避免大表join,使用group by分组,禁止order by rand(),单条语句不宜同时更新多个表。 7. **权限与安全** - 应用权限以查、增、改为主,删除操作由DBA评估授予,禁止授予super权限。 - 所有DDL操作通过特定...

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

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

    PHP的面试题集收集整理.doc

    2. 查询语句:`SELECT m.id, m.title, m.hits, COUNT(c.comment_id) as replies FROM message m LEFT JOIN comment c ON m.id = c.id GROUP BY m.id ORDER BY replies DESC`. 3. 下拉菜单实现:使用PHP遍历`category...

Global site tag (gtag.js) - Google Analytics