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

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

因为这是多个任务一起查,也就没法用 LIMIT 1 了     那如何查出每个任务最新执行成功那一条记录了?     ...这里也就对应了文章标题:分组后取每组第 1 条记录     实现方式其实有很多,我这里提供一种,如下     结合索引 idx_status_task_date_modify(exec_status... 数据量,也就是说数据量不大   那么用一个 SQL 就可以实现业务(直接联表 t_business 、 t_business_task 、 t_task 、 t_task_latest_exec_log...总结   1、大家写 SQL 时候,一定要多结合执行计划来写 神奇 SQL 之 MySQL 执行计划 → EXPLAIN,让我们了解 SQL 执行过程!   ...1、分组后如何取前 N 条     2、分组后如何取倒数 N 条

1.7K40

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

一、前言 分组查询是常见SQL查询语句。...首先,我们知道MySQL数据库分组功能主要是通过GROUP BY关键字来实现,而且GROUP BY通常得配合聚合函数来使用用,比如说分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)...但是今天我们要探讨不是GROUP BY关键字学习和使用,而是一种有点另类分组”查询。 最近,项目上遇到这样一个功能需求。...而业务系统官网上需要滚动展示一些热门资讯信息列表(浏览量越大代表越热门),而且每个类别的相关资讯记录至多显示3条,换句话:“按照资讯分类分组,取每组前3条资讯信息列表”。...我们想在查询每条资讯记录时要是能查出其所在类型排名就好了,然后根据排名字段进行过滤就好了。这时候我们就想到了子查询,而且MySQL是可以实现这样功能子查询

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

    合并求取分组记录第一条数据

    有朋友问, 关于电影记录查询SQL,突然不知道如何下手,给个提示参考一下啊,谢谢。...','007'); INSERT INTO MovieInfo VALUES ('007第三部','电影链接13','007'); GO SELECT * FROM MovieInfo; 先写一个分组并求分组记录大于...,只有1条记录: MovieType Name 007 007第二部 在同事指导下,说ROW_NUMBER() 可以在给记录编号同时指定分组,然后我们取分组中编号为1记录即可,先来分组编号...同事说可以利用聚合函数或者自查询,下面是给出2条SQL语句,功能一样: select * from MovieInfo a where name=(select MIN(name) from MovieInfo...下面是我今天练习这个SQL查询PDF.NET集成开发工具,该工具可以在官网找到下载链接。 ?

    1.2K100

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

    博主好久没写过后端了,这一写就直接碰到我知识盲区了 我们简单还原一下,这里使用一个表模拟下 表字段如下 表内容如下,我们需求就是取出相同name数据中时间最新一条。...不知道大家首先会想到什么,我第一想到是使用group,当时认为分组不就是group吗,害,easy 然后我就开始了尝试,结果。。。。。 好像不是这么回事呀。。。。...然后开始我错误解决之路。。。。 就在我想要放弃时候,我突然脑子清醒了,开始仔细思考这个需求,不就是把每个名字和最新时间拿出来,然后再根据名字和最新时间直接查,不就是最新记录了吗?...| 2023-05-26 20:01:54 | | oo | 2023-05-03 20:01:56 | +------+---------------------+ 而后我们只需要将上面查询数据和表中数据进行左连接即可...顺便请教下大佬们,有没有效率更高方法,方便的话评论区交流下吧。

    22810

    MySQL group by分组后,将每组所得到id拼接起来

    背景 需要将商品表中sku按照spu_id分组后,并且得到每个spu下sku_id,需要使用到group_concat函数 select spu_id, count(*), group_concat...') as ids from product_sku where category = 'tv' group by spu_id; group_concat函数 group_concat函数,实现分组查询之后数据进行合并...可以排除重复值; 2> 可以使用order by子句对结果中值进行排序; 示例: select spu_id, count(*), group_concat(id SEPARATOR ', ')...而MySql默认最大拼接长度为1024个字节,一般情况下是够用,但如果数据量特别大,就会存在java层返回内容被截断问题,这时,为了保证拼接数据完整性,就需要手工修改配置文件group_concat_max_len...本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您支持。 首发链接:https://www.cnblogs.com/lingyejun/p/17581506.html

    51010

    SQL分组

    分组定义 是多个分组并集,用于在一个查询中,按照不同分组列对集合进行聚合运算,等价于对单个分组使用"UNION ALL",计算多个结果集并集。...分组集种类 SQL Server分组集共有三种 GROUPING SETS, CUBE, 以及ROLLUP, 其中 CUBE和ROLLUP可以当做是GROUPING SETS简写版 GROUPING...并且更加 高效,解析存储一条SQL于语句 GROUP SETS示例 我们以Customers表为例,其内容如下: 我们先分别对城市和省份进行分组,统计出他们数量 SELECT 城市,NULL 省份,...,其作用是对每个列先进行一次分组,并且对第一列数据在每个组内还进行一次汇总,最后对所有的数据再进行一次汇总,所以相比GROUPING SETS会多了个所以数据汇总。...SELECT 省份, 城市, COUNT(客户ID) 数量 FROM Customers GROUP BY 省份,城市 WITH CUBE 结果如下: 在ROLLUP基础上,还会将第一列每组汇总数据额外显示在最后

    8310

    优化电商漏斗分析从 3 分钟 + 到 10 秒

    ,找出发生时间在 t1 之后,且早于 t1+7(漏斗窗口期)第一条记录,其时间 t2 赋值给结果数组第二个成员(如果找不到 t2 则赋值为空);第四步,在当前组第三种事件类型记录中,找出发生时间在...t2 之后,且早于 t1+7 第一条记录,其时间 t3 赋值给结果数组第三个成员(如果 t2 为空,或者找不到 t3 则赋值为空);第五步,用各组结果数组三个成员做汇总计数,即可得到最终结果。...SQL 基于无序集合,不能严格保证每组数据连续存放,所以不能直接应用有序算法。二、新增数据新增数据并不总是按分组字段继续有序,所以不能简单追加到有序数据末尾。...B3:定义新游标,每组中第一种事件类型第一条数据命名为 first 字段,原分组命名为 all 字段。再定义过滤,去掉 first 字段为空。A4:对 B3 定义计算。...第二次循环,在 all 中找 eventtype 为第二种事件类型,且 etime 大于 t,小于 t1 之后 7 天第一条记录,其 etime 赋值给 t 和结果序列第二个成员(找不到则赋值为空)

    8710

    SQL 获取状态一致分组

    星星点灯是一家水果店,它提供了外卖水果拼盘服务。水果店能够提供四种水果拼盘:水果魔方、海星欧蕾、猫头鹰、草莓雪山,下表反应了某一时刻店内水果准备情况。...当有客户订水果拼盘时,只有拼盘要用到所有水果都准备好了才能制作。 现在,我们要写 SQL 找出可以立即制作水果拼盘名称。 实现方式比较多,有一种是通过数量去判断。...比如水果魔方,它需要水果有 5 种,当这些水果处于准备好状态数量也为 5 时,它就可以被制作了。...我们可以换另一种表达,当某个水果拼盘下没准备好水果数量为 0 时,这个拼盘可以被制作。...,那就说明不存在没准备好水果。

    59230

    SQL字符串分组聚合(ZT)

    本文转载于T-Sql:字符串分组聚合,也许你还有更简单办法?    ...今天在看订阅RSS时候,看到这么一个问题:T-Sql中如何对分组信息进行聚合,并以逗号连接字符;也就是对一个表中某个字段进行分组,然后对另一个字段聚合,如果表达得不太清楚,请看下面的表。...,然后再查询语句里面调用这个聚合函数;实际上还有更简单办法,这是作者给出解决办法,没有用到自定义聚合函数,他用是FOR XML PATH(‘’)这样处理方式,感觉真是爽 with t  as(...Stuff函数是一样....Sql语言一样,都把字符串当作字符数组处理,但一个差别在于,大多数程序设计语言数组下标起始位为0,而Sql Server中为1,由于惯性思维,常常把一般程序设计语言中0起始位带至SQL编程中。

    1.8K10

    sql查询基本语法_以下select语句语法正确

    (展示时候,只会展示分组记录第一条记录),分组时,一般会结合使用count()、max()、min()、avg()、sum()函数。...; sql语句意思是:my_student表以c_id进行分组,然后显示分组每组c_id名称、每组总数、每组最高、最低、平均身高和每组年龄总和。...c_id ,sex; 表示含义是,对整个表先按照c_id进行分组,然后在此分组基础之上,然后每组再按照sex,进行分组。...C、多字段分组(加上显示每组某一字段所有数据) selectc_id,sex,count(*),max(height),min(height),avg(height),sum(age) ,GROUP_CONCAT...却不能做having能做很多事情,主要是因为 where只能在磁盘提取数据时候对数据进行操作;而在内存中对数据进行group by分组之后结果进行处理,只能通过having。

    2.9K10

    mysql分组和排序同时使用时查询数据异常

    ,没有得到我们需要结果,这是因为group by 和 order by 一起使用时,会先使用group by 分组,并取出分组第一条数据,所以后面的order by 排序时根据取出来第一条数据来排序...,但是第一条数据不一定是分组里面的最新数据。...解决方案: 方案一: 使用子查询,先排序查出结果后作为临时表在分组。这里有个坑,必须要加limit,如果没有加,有些版本数据库也无法查处正确数据。...:= '', @num := 0) t ORDER BY a.Create_Time DESC ) x WHERE RANK = 1; 方案三: 使用Max()函数,根据地址分组查出每个地址最新数据时间...,然后将查询结果关联原表查出正确数据。

    2K10

    group by 和聚合函数

    也就是查询结果是不确定,hash?这可能涉及到在磁盘存储等等,这里不去深究。因此,并不能确认第一次查出字段值,而且分组后不是条件值被合并后没有意义。...4.添加聚合函数 聚合函数有如下几种: 函数 作用 支持性 sum(列名) 求和 max(列名) 最大值 min(列名) 最小值 avg(列名) 平均值 first(列名) 第一条记录 仅Access...分析:   首先进行分组工作,group by name,这时8条数据被分成两组:dd和mm;然后count作用就是统计每组里面的个数,分别是5和3....,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定行。...having 子句作用是筛选满足条件组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定组,也可以使用多个分组标准进行分组

    2.1K110

    查询top1数据 想到关于select 返回数据

    最近工作中有遇到查询分组第一条问题,由此想到了一些关于 select 返回数据顺序几个问题。 select 返回数据顺序在没有指定排序情况下是不确定,是一个集合。集合本身是没有顺序!!...对于分组获取第一条数据,很多博客给方案是先对数据进行排序,再对结果集进行分组,这样就能够获取到分组第一条数据了。说实话,这个很符合逻辑,我之前确实也是这么想。...还是以最初数据为例,需要按page_id进行分组,取每组中addtime最大一条数据,正确结果应该是: id page_id addtime 12 1 1558408852 9 3...第一条sql,先排序,然后对结果集进行分组操作得到结果是 id page_id addtime 1 1 1558342663 4 2 1558348351 6 3 1558348361...如果想要获取分组第一条,先分组,获取分组中排序字段最大或最小排序字段值(addtime),然后通过排序字段(addtime),分组字段(page_id)与原数据进行连表操作,取出其他字段数据。

    1.3K30

    MySQL语句与Java代码实现按需过滤企业员工资质证书

    ,取变动时间最近显示出来,其余不显示; 数据源:SAP生产系统通过RPC方式获取; 正文 下面是表主要结构(手机显示可能存在换上现象): 字段名称 类型 备注 employee_special_uuid...,加一个标识,比如加个字段显示x,过滤时候用sql直接出结果,挺方便,我问过SAP开发同事:no; 思路 代码没有新颖,只说一下我思路(也可能有些问题): 1、首先用MySQL语句GROUP...BY 已经三个字段结果分组分组结果:按照需求将数据分成一组一组每组数据并按照变动时间,最新在上面(也就是符合要求那一条,在最上面) 2、Java代码拿到数据集,进行处理; 3、刚才上面说了...,第一条是符合要求,就遍历数据集,每组数据集,用List特点,将所有元素置为相同元素,与第一条保持一致; 4、去重; 通过简单方式,实现了这个小需求; 总结 总结成简单的话, 1、先分组,...分组数据按照时间降序排列; 2、再用Java代码处理List,将list元素用遍历方式将值设置为一致; 3、将list去重;

    54110

    SQL 找出分组中具有极值

    这些需求有两个共同点:一是需要做分组,有按部门分组、有按科目、也有按用户分组;二是在分组里面找到存在极值行,是整行数据,而不只是极值。...子查询 如果你数据库还不支持窗口函数,那可以先对 emp 分组,取出每个部门中最高薪资,再和原表做一次关联就能获取到正确结果。...在此之前,你可能很难想到可以使用 Left Join 达到分组求极值效果。现在就来揭开 Left Join 神秘面纱。...当 a.sal 是分组最大值时,a.sal < b.sal 条件不成立,关联出来结果中 b 表数据为 NULL。...因此,通过 WHERE b.sal IS NULL 可以找到每个分组里面 a.sal 最大记录。

    1.8K30

    【数据库】谈谈group by

    大家好,又见面了,我是你们朋友全栈君。 前一段时间写SQL比较频繁,有时候想要用group by 来进行分组,却总是报错,今天就总结一下group by 用法。...course 在mysql中,可以查询到结果集,如下: 跟原始数据对比,可以发现,查询到结果集是每一门课程第一条记录,这样就丢失了一部分数据。...如果是在sql server中这么写是会直接报错,大家感兴趣的话可以测试一下。 其实group by函数是用来跟数据库统计函数结合使用,对数据进行分组统计。...查询结果: SELECT name,sex,course FROM `groupbytest` GROUP BY course,sex 对比以上两条SQL查出结果集,可以看出,查询结果跟...第一条是先根据sex进行分组,再根据course分组,而第二条是先根据course分组,再根据sex分组。 2.group by 和count函数一起使用:对学生性别进行统计。

    2K20
    领券