首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL分组查询后取每组的前N条记录

而业务系统的官网上需要滚动展示一些热门资讯信息列表(浏览量越大代表越热门),而且每个类别的相关资讯记录至多显示3条,换句话:“按照资讯分类分组,取每组的前3条资讯信息列表”。...二、核心思想 一般意义上我们在取前N条记录时候,都是根据某个业务字段进行降序排序,然后取前N条就能实现。...但是当你仔细阅读我们的题目要求,你会发现:“它是让你每个类型下都要取浏览量的前3条记录”。 一种比较简单但是粗暴的方式就是在Java代码中循环所有的资讯类型,取出每个类型的前3条记录,最后进行汇总。...要计算出某条资讯信息的在同资讯分类下所有记录中排第几名,换成算出 有多少条浏览量比当前记录的浏览量高,然后根据具体的多少(N)条+1就是N+1就是当前记录所在其分类下的的排名。...(假设为N),所有N+1就等于当前记录在其分类下的按照浏览量降序排名。

26.8K32
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ThinkPHP5.1 子查询-使用 Group 获取每组最新数据

    背景 当前项目业务中, 需要以字段 account_id 分组,获取 "redbook_effect" 数据表中最新的数据记录集合 - 根据网上的经验描述,如果 group 和 order 一起使用...- 会先进行分组获取, - 再对得到的结果集进行排序 - 所以如此一来,得到的最终数据中,对应字段 "account_id" 的记录并非是最新的 ---- 解决方案:【使用子查询,先进行排序...field('account_id,note_content_tag') ->group('account_id') ->select(); 如上操作,生成的...,所以子查询的结果必须有一个别名 ②....大批量数据处理 对于大数据量的查询操作, 建议 可以使用新版提供的游标查询功能 【>>> 大批量数据处理】 ( 该查询方式利用了PHP的生成器特性,可以大幅减少大量数据查询的内存占用问题 )

    2.3K30

    sql查询每组数据中时间最大的一条

    博主好久没写过后端了,这一写就直接碰到我知识盲区了 我们简单还原一下,这里使用一个表模拟下 表的字段如下 表的内容如下,我们的需求就是取出相同name的数据中时间最新的一条。...然后开始我的错误解决之路。。。。 就在我想要放弃的时候,我突然脑子清醒了,开始仔细思考这个需求,不就是把每个名字和最新的时间拿出来,然后再根据名字和最新时间直接查,不就是最新记录了吗?...代码 首先第一步,找出每一个name对应的最新时间 select name, max(dtime) from test group by name; +------+-----------------...就是自己脑子抽了,没想起来,特来记录下。...顺便请教下大佬们,有没有效率更高的方法,方便的话评论区交流下吧。

    26410

    从mysqldump自定义导出n条记录说起

    很多时候DBA需要导出部分记录至开发、测试环境,因数据量需求较小,如果原库的记录多,且表数量也多,在用mysqldump命令导出时可以添加一个where参数(如自定义导出n条记录),而不必全量导出。...示例脚本如下: 导出dbname库每张表的1000条记录 /usr/local/mysql5.7/bin/mysqldump --skip-add-locks --master-data=2 --...: 1、导出数据和表结构——将特定数据库特定表中的数据和表格结构和数据全部返回 /usr/local/mysql5.7/bin/mysqldump --skip-add-locks --master-data...mysql/mysql3307/tmp/mysql3307.sock dbname tbname -d > tbname_str.sql 3、导出数据却不导出表结构——只返回特定数据库中特定表格的数据...--socket=/data/mysql/mysql3307/tmp/mysql3307.sock dbname tbname -t >tbname_data.sql 4、导出特定数据库的所有表格的表结构及其数据

    1.8K30

    MySQL获取分组后的TOP 1和TOP N记录

    有时会碰到一些需求,查询分组后的最大值,最小值所在的整行记录或者分组后的top n行的记录,在一些别的数据库可能有窗口函数可以方面的查出来,但是MySQL没有这些函数,没有直接的方法可以查出来,可通过以下的方法来查询...李四 | 英语 | 50 | | 9 | 王五 | 英语 | 89 | +----+--------+--------+-------+ TOP 1 查询每门课程分数最高的学生以及成绩...| 数学 | 99 | | 张三 | 英语 | 90 | +--------+--------+-------+ 3 rows in set (0.00 sec) TOP N...N>=1 查询每门课程前两名的学生以及成绩 1、使用union all 如果结果集比较小,可以用程序查询单个分组结果后拼凑,也可以使用union all root:test> (select name,

    2.9K41

    MYSQL学习:GROUP BY分组取最新的一条记录

    日常开发当中,经常会遇到查询分组数据中最新的一条记录,比如统计当前系统每个人的最新登录记录、外卖系统统计所有买家最新的一次订单记录、图书管理系统借阅者最新借阅书籍的记录等等。...今天给大家介绍一下如何实现以上场景的SQL写法,希望对大家能有所帮助!...INTO `bookinfo` VALUES (5, 'ISBN005', '物理'); INSERT INTO `bookinfo` VALUES (13, 'ISBN006', '读者'); -- 借阅记录表...bookinfo b on b.id=a.book_id INNER JOIN userinfo c on c.uid=a.user_id GROUP BY a.user_id -- 说明: 这样会存在获取书籍名称错乱的情况..., -- 因为使用聚合函数获取的书籍名称,不一定是对应用户 -- 最新浏览记录对应的书籍名称 写法2 采用子查询的方式,获取借阅记录表最近的浏览时间作为查询条件 select a.user_id ,c.uname

    20.4K20

    MySQL中如何随机获取一条记录

    随机获取一条记录是在数据库查询中常见的需求,特别在需要展示随机内容或者随机推荐的场景下。在 MySQL 中,有多种方法可以实现随机获取一条记录,每种方法都有其适用的情况和性能特点。...方法一:使用 ORDER BY RAND() 这是最常见的随机获取一条记录的方法之一: SELECT * FROM testdb.test_tb1 ORDER BY RAND() LIMIT 1; 虽然简单直接...来获取记录,这种方法比直接使用 ORDER BY RAND() 效率更高。..., 1'; EXECUTE STMT USING @row_num; DEALLOCATE PREPARE STMT; 不过如果表比较多,建议表记录数从统计信息中获取 方法选择 对于小表或需求不是十分严格的场景...合理选择适合情况的随机获取记录方法,可以有效提高数据库查询效率。 通过以上方法和推荐,可以更好地在 MySQL 数据库中实现随机获取一条记录的功能,满足不同场景下的需求。

    69110

    记一次有意思的 SQL 实现 → 分组后取每组的第一条记录

    ,也就没法用 LIMIT 1 了     那如何查出每个任务的最新执行成功的那一条记录了?     ...这里也就对应了文章的标题:分组后取每组的第 1 条记录     实现方式其实有很多,我这里提供一种,如下     结合索引 idx_status_task_date_modify(exec_status...  新增任务最新执行成功记录表   一般而言,大数据量的日志表是不参与复杂查询的,所以单独拎出来一个表,专门记录任务最新执行成功信息   一个任务最多只有一条记录,不存在则直接插入表中,存在则根据 data_date...DESC,modify_time DESC 与表中记录做比较,看是否需要进行表中记录更新   因为一个任务最多只有一条记录,那么 t_task_latest_exec_log 的数据量是 小于等于 t_task...1、分组后如何取前 N 条     2、分组后如何取倒数 N 条

    1.7K40

    VBA与数据库——获取第一条查找记录

    在简化程序编写-查找里,已经介绍过了查找数据的方法,里面演示的数据非常简单,数据源是没有重复的。...如果数据源里存在重复的时候,结果将会是这样的: 这个和使用Excel的习惯是不一致的,一般在Excel里使用VLookup查找的话,取的会是第一条满足条件的数据;如果是使用VBA字典的方式,获取的是最后放入字典的数据...也就是只会出现一条记录,很多时候在Excle里处理数据的习惯就是想得到一条结果。...AdoConn = Nothing End Sub 改造一下sql语句可以,通过这条语句: select 项目,First(数据) as 数据 from [Sheet1$D1:E7] group by 项目 获取到一个没有重复的数据源...这里主要用到group by分组,获取First第一个出现的数据,将这条语句放在括号里,相当于括号里的就是一张新的表格,有点类似Excel里公式的嵌套使用。

    1.9K20
    领券