首页
学习
活动
专区
圈层
工具
发布

sql中筛选第一条记录

问题描述 我们现在有一张表titles,共有4个字段,分别是emp_no(员工编号),title(职位),from_date(起始时间),to_date(结束时间),记录的是员工在某个时间段内职位名称,...image.png ---- 方法二 通过rank over partition by函数实现,这个目前是Oracle独有的函数,如果你用的是mysql或者sql server就没办法使用了。...我们之前在问题里面提到了一个emp_no会对应多条职位信息,然后对于每个emp_no的记录进行一个降序排列,接下来我们只需要把上面的结果当成一个子查询然后筛选rank = 1 就好了。...---- 综上,如果各位目前使用的是Oracle,推荐各位使用方法二: 方法二容错率高,如果titles表里面有两条记录emp_no和from_date都是一样的,方法一就会报错了,单条子查询返回多行;...的记录,方法一只有一个最大或者最小可供选择。 ---- peace~

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

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

    按业务分页,每个业务可以展开显示关联的任务信息以及任务最新的执行成功信息   任务最新的执行成功信息:状态成功,数据日期最大的那条执行日志信息;如果数据日期一致,则取最终修改时间最大的   后端返回的...  一般而言,大数据量的日志表是不参与复杂查询的,所以单独拎出来一个表,专门记录任务最新执行成功信息   一个任务最多只有一条记录,不存在则直接插入表中,存在则根据 data_date DESC,modify_time...DESC 与表中记录做比较,看是否需要进行表中记录更新   因为一个任务最多只有一条记录,那么 t_task_latest_exec_log 的数据量是 小于等于 t_task 的数据量的,也就是说数据量不大...,返回前端需要的格式   新增表后,其初始数据该如何导入了?...总结   1、大家写 SQL 的时候,一定要多结合执行计划来写 神奇的 SQL 之 MySQL 执行计划 → EXPLAIN,让我们了解 SQL 的执行过程!

    2.8K40

    小红书大数据面试SQL-查询每个用户的第一条和最后一条记录

    一、题目 现有一张订单表 t_order 有订单ID、用户ID、商品ID、购买商品数量、购买时间,请查询出每个用户的第一条记录和最后一条记录。...⭐️⭐️⭐️⭐️⭐️ 业务常见度 ⭐️⭐️⭐️⭐️⭐️ 三、SQL 1.添加行号 使用row_number()根据用户进行分组,根据时间分别进行正向排序和逆向排序,增加两个行号,分别为asc_rn和...desc_rn 执行SQL select order_id, user_id, product_id, quantity, purchase_time...----------+----------+-------------+-----------+------------------------+---------+----------+ 2.取出第一条和最后一条记录...限制asc_rn=1取第一条,desc_rn=1 取最后一条 执行SQL select order_id, user_id, product_id, quantity

    1.2K10

    SQL中Group By的使用,以及一些特殊使用方法

    3、简单Group By 示例1 select 类别, sum(数量) as 数量之和 from A group by 类别 返回结果如下表,实际上就是分类汇总。 ?...4、Group By 和 Order By 示例2 select 类别, sum(数量) AS 数量之和 from A group by 类别 order by sum(数量) desc 返回结果如下表...Access中是不支持“Group By All”的,但Access中同样支持多列分组,上述SQL Server中的SQL在Access可以写成 select 类别, 摘要, sum(数量) AS 数量之和...(列名) 求和 max(列名) 最大值 min(列名) 最小值 avg(列名) 平均值 first(列名) 第一条记录 仅Access支持 last(列名) 最后一条记录 仅Access支持 count...compute子句能够观察“查询结果”的数据细节或统计各列数据(如例10中max、min和avg),返回结果由select列表和compute统计结果组成。

    4K20

    SQL中Group By的使用详解!

    今天一起来看看SQL语句中的group by语法!...2、原始表3、简单Group By示例1select 类别, sum(数量) as 数量之和 from A group by 类别返回结果如下表,实际上就是分类汇总。...4、Group By 和 Order By示例2select 类别, sum(数量) AS 数量之和 from A group by 类别 order by sum(数量) desc返回结果如下表在Access...Access中是不支持“Group By All”的,但Access中同样支持多列分组,上述SQL Server中的SQL在Access可以写成select 类别, 摘要, sum(数量) AS 数量之和...(列名)求和通用支持max(列名)最大值通用支持min(列名)最小值通用支持avg(列名)平均值通用支持first(列名)第一条记录仅Access支持last(列名)最后一条记录仅Access支持count

    6.9K31

    SQL 聚合查询

    数据以行为粒度存储,最简单的 SQL 语句是 select * from test,拿到的是整个二维表明细,但仅做到这一点远远不够,出于以下两个目的,需要 SQL 提供聚合函数: 明细数据没有统计意义,...可以看看下面两段查询结果的对比: SELECT MAX(cost), id FROM test -- id: 100 SELECT SUM(cost), id FROM test -- id: 1 第一条查询可以找到最大值那一行的...id,而第二条查询的 id 是无意义的,因为不知道归属在哪一行,所以只返回了第一条数据的 id。...当然,如果同时计算 MAX、MIN,那么此时 id 也只返回第一条数据的值,因为这个查询结果对应了复数行: SELECT MAX(cost), MIN(cost), id FROM test -- id...上面的例子中可以正常查询,表示按照班级分组看总分,且仅筛选出平均分大于 60 的班级。

    3.5K31

    MySQL 怎么用索引实现 group by?

    引言 使用索引实现 group by,最简单的方式,大概就是这样了: 存储引擎按顺序一条一条读取记录,返回给 server 层。 server 层判断记录是否符合 where 条件。...松散索引扫描 松散索引扫描,从存储引擎读取分组记录时,会跳着读,读取分组前缀之后,直接通过分组前缀(group by 字段的值)定位到分组中符合 where 条件的第一条或最后一条记录,而不需要读取分组的所有记录...Item_sum_min 执行阶段,读取分组最小值的过程分为两步: 读取分组前缀(示例 SQL 中 group by 的 e1 字段值),从存储引擎读取分组的第一条记录,得到分组前缀。...紧凑索引扫描,存储引擎按顺序一条一条读取记录,返回给 server 层,server 层判断记录是否符合 where 条件,然后对符合条件的记录进行聚合函数逻辑处理。...松散索引扫描,对于每个分组,都会从存储引擎读取两次数据,第一次是读取分组的第一条记录,得到分组前缀;第二次是根据分组前缀读取分组中索引扫描范围的第一条或最后一条记录。

    8.6K60

    MySQL 怎么用索引实现 group by?

    引言 使用索引实现 group by,最简单的方式,大概就是这样了: 存储引擎按顺序一条一条读取记录,返回给 server 层。 server 层判断记录是否符合 where 条件。...松散索引扫描 松散索引扫描,从存储引擎读取分组记录时,会跳着读,读取分组前缀之后,直接通过分组前缀(group by 字段的值)定位到分组中符合 where 条件的第一条或最后一条记录,而不需要读取分组的所有记录...Item_sum_min 执行阶段,读取分组最小值的过程分为两步: 读取分组前缀(示例 SQL 中 group by 的 e1 字段值),从存储引擎读取分组的第一条记录,得到分组前缀。...紧凑索引扫描,存储引擎按顺序一条一条读取记录,返回给 server 层,server 层判断记录是否符合 where 条件,然后对符合条件的记录进行聚合函数逻辑处理。...松散索引扫描,对于每个分组,都会从存储引擎读取两次数据,第一次是读取分组的第一条记录,得到分组前缀;第二次是根据分组前缀读取分组中索引扫描范围的第一条或最后一条记录。

    6.5K20

    005微信小程序云开发API数据库-查询记录-聚合-统计记录数量

    { // 如果查询结果不为空,返回查询结果(必选) return result.data[0] // 仅返回第一条记录(根据实际需求修改) } } catch (e) { // 打印错误信息并抛出异常...(可选) if (res.data && res.data.title) { // 如果找到记录,返回记录数据(可选) return res.data // 仅返回第一条记录(根据实际需求修改...(可选) if (res.data && res.data.title) { // 如果找到记录,返回记录数据(可选) return res.data // 仅返回第一条记录(根据实际需求修改...return result // 仅返回第一条记录的 ID(根据实际需求修改) } else { // 如果查询结果小于等于 0,返回提示信息(可选) return 'No records...(可选) if (res.data && res.data.title) { // 如果找到记录,返回记录数据(可选) return res.data // 仅返回第一条记录(根据实际需求修改

    1.8K10

    Mysql常用sql语句(12)- group by 分组查询

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 group by 关键字可以根据一个或多个字段对查询结果进行分组...知识点 分组之后,只会返回组内第一条数据;具体原理可以看看下图 ?...count():统计记录的条数 sum():字段值的总和 max():字段值的最大值 min():字段值的最小值 avg():字段值的平均值 具体的栗子 # count统计条数 select count...(*) from yyTest group by department; # sum总和 select sum(age) from yyTest group by department; # max...group by + with rollup的栗子 with rollup用来在所有记录的最后加上一条记录,显示上面所有记录每个字段的总和(不懂的直接看栗子) select GROUP_CONCAT(username

    6.7K21
    领券