精华内容
下载资源
问答
  • -- mysql分组排序取前N记录的最简洁的单sql。use test;drop table if exists test;create table test (id int primary key,cid int,author varchar(30)) engine=myisam;insert into test values(1,1,'test1'),(2...

    -- mysql分组排序取前N条记录的最简洁的单条sql。

    use test;

    drop table if exists test;

    create table test (

    id int primary key,

    cid int,

    author varchar(30)

    ) engine=myisam;

    insert into test values

    (1,1,'test1'),

    (2,1,'test1'),

    (3,1,'test2'),

    (4,1,'test2'),

    (5,1,'test2'),

    (6,1,'test3'),

    (7,1,'test3'),

    (8,1,'test3'),

    (9,1,'test3'),

    (10,2,'test11'),

    (11,2,'test11'),

    (12,2,'test22'),

    (13,2,'test22'),

    (14,2,'test22'),

    (15,2,'test33'),

    (16,2,'test33'),

    (17,2,'test33'),

    (18,2,'test33');

    --

    select * from (select cid,author,count(*) as number from test group by cid,author) a

    where

    2>(

    select count(*)

    from (select cid,author,count(*) as number from test group by cid,author) b

    where a.cid=b.cid and a.number

    )order by cid,number desc;

    展开全文
  • 比如每个班级成绩第一的学生等等 oracle 和 sqlserver支持函数,mysql不行 这里给一个粗暴的方法: 两个行数 GROUP_CONCAT(A ORDER BY B)和substring_index 思路: 1、GROUP_CONCAT(fA ORDER BY B) 按照...
    select row_number() over(partition by A order by B ) as rowIndex from table

    比如取每个班级成绩第一的学生等等

    oracle 和 sqlserver支持函数,mysql不行

    这里给一个粗暴的方法:

    两个行数

    GROUP_CONCAT(A ORDER BY B)和substring_index

    思路:

    1、GROUP_CONCAT(fA ORDER BY B) 按照条件排序后拼装字段,默认逗号,4“,”分隔

    2、substring_index 取第一个逗号前的数,如果按照成绩降序排列,就能取到第一名的
    substring_index(GROUP_CONCAT(f.id ORDER BY f.dzrq DESC,fz.faid desc),',',1)

    涉及复杂的逻辑可能需要自定义函数了

    展开全文
  • oracle和mysql分组排序取第一条数据

    千次阅读 2018-12-28 13:34:38
    查每个人的Orderstr 是1 的数据,并保证name不重复 oracle select *  from (SELECT a.*, row_number() over(partition by ida order by orderstr) rn  FROM (select orderstr, name, ida from test) a ) where.....

    场景

    需求

    查每个人的Orderstr 是1 的数据,并保证name不重复

    oracle

    select *
      from (SELECT a.*, row_number() over(partition by ida order by orderstr) rn
              FROM (select orderstr, name, ida from test) a )
    where rn = 1 ;

    结果

     

    mysql

    按 员工号STAFF_ID 分组 按  时间START_TIME  排序 取每个员工最新数据

    select SUBSTRING_INDEX(group_concat(STAFF_ID order by START_TIME asc),',',1) as STAFF_ID,START_TIME
    from t_acc_user_accommodation a GROUP BY  STAFF_ID;

     

     

     

     

    展开全文
  • 表 (5-8秒刷新次) 更新时间、采集点编号和最新读数 说明一下 表里面有很多点位数据 然后固定时间insert次 我需要拿到 最新时间的 所有点位的 数据 create table C010_CURRENT_DATA ( ID varchar(50) not ...

    记录一下今天遇到的一个需求:

    表 (5-8秒刷新一次) 取更新时间、采集点编号和最新读数
    说明一下 表里面有很多点位数据 然后固定时间insert一次
    我需要拿到 最新时间的 所有点位的 数据

    create table C010_CURRENT_DATA
    (
       ID                   varchar(50) not null comment '唯一id',
       UPD_DATE             datetime comment '更新时间',
       CP_CODE              varchar(50) comment '采集点编号',
       CURRENT_VALUE        decimal(8,2) comment '最新读数',
       primary key (ID)
    );
    alter table C010_CURRENT_DATA comment '各个温度传感器当前最新读数(5-8秒刷新一次)';
    

    数据库测试数据
    在这里插入图片描述

    SQL

    SELECT
    		MAX( t.UPD_DATE ) AS UPD_DATE,
    		t.CP_CODE,
    		SUBSTRING_INDEX( GROUP_CONCAT( t.CURRENT_VALUE ORDER BY t.UPD_DATE DESC ), ',', 1 ) AS codeValue
    	FROM
    		( SELECT UPD_DATE, CP_CODE, CURRENT_VALUE FROM c010_current_data ) t
    	GROUP BY
    	t.CP_CODE 
    

    查询后数据
    在这里插入图片描述

    参考文档:https://blog.csdn.net/m0_37797991/article/details/80511855

    展开全文
  • mysql分组排序取时间最近的第一条

    千次阅读 2020-04-29 10:30:03
    起因:需要对一张表数据进行分组排序,不同设备最新的一条更新记录,那么问题来了, 表数据经过简单Group By 之后,所获取到的 数据与期望数据不一致, 如图不同vem_id的最新次的更新数据,常规group by 无法解决...
  • 1.首先利用条件筛选出基本数据SELECT * from test where columna = '...对基本数据分组并利用SUBSTRING_INDEX和GROUP_CONCAT函数取出需要的字段SELECT tab1.columnc, tab1.columnd, tab1.columne,SUBSTRING_INDEX(G...
  • mysql
  • MySQL分组排序取第一列数据的方法

    千次阅读 2019-02-25 23:23:14
    需求分析:多行数据分组排序之后,如何获取第一行数据?具体案例如下: 根据要求查询结果: 查询结果username不能重复; username重复的选择条件是status为1则选择该,多个1则按照createtime选取最近的一; ...
  • ]mysql 分组 group by, 排序 记录中,时间最大的一条记录 SELECT A.* FROM test A, (SELECT aid, MAX(day) max_day FROM test GROUP BY aid) B WHERE A.aid = B.aid AND A.day = B.max_day ORDER BY a...
  • 防止合并的构造对于派生表和视图引用是相同的: 1.聚合函数( SUM() , MIN() , MAX() , COUNT()等) 2.DISTINCT 3.GROUP BY 4.HAVING 5.LIMIT 6.UNION或UNION ALL 7.选择列表中的子查询 8.分配给用户变量 9.仅...
  • mysql中有一张表用户表user 其中李四是重复数据 id name 1 张三 2 李四 3 李四 4 王五 如何去重实现查询效果为 id name 1 张三 2 李四 4 王五 id为主键,去重之后保留id最小的一条数据 或者可以实现效果为 id name 1 ...
  • mysql 分组排序 前top n

    千次阅读 2020-08-27 14:10:00
    力扣mysql 题目为: Employee 表包含所有员工信息,每个员工有其对应的工号Id,姓名 Name,工资 Salary 和部门编号 DepartmentId 。 +----+-------+--------+--------------+ | Id | Name | Salary | ...
  • mysql分组排序取最大、最小、最新、前N记录

    万次阅读 多人点赞 2018-03-08 11:11:48
    先看一下本示例中需要使用到的数据创建表并插入数据:create table tb(name varchar(10),val int,memo varchar(20)) insert into tb values...insert into tb values('a', 1, 'a1') insert into tb values('a', 3, ...
  • mysql group by 函数 分组排序取第一条数据 select aa.* from 你的操作的表名 as aa right join ( select 分组的那一列列名, max(排序的那一列列名+0) as max from 你的操作的表名 group by 分组的那一列列名 ...
  • 一、需要实现分组排序并且组内状态优先级最高的数据 有一张这样的数据表, 需求是根据error_type分组然后status最小的第一条数据 第一种写法: select t.* from ( select e.* from error_record e where ...
  • sql 排序 ROW_NUMBER() OVER 函数这是我之前写的sql排序函数,现在的需求是mysql 分组,组内排序并且取第一条数据。 mysql用子查询实现类似于row_number()函数的功能 场景: versionId=0时,是默认版本,即该记录...
  • mysql 分组取最新的一条记录(整条记录)

    万次阅读 热门讨论 2013-09-04 14:55:33
    一种是先排序,然后在次分组查询(默认第一条),就是最新的一数据了#select * from t_assistant_article as a, (select max(base_id) as base_id, max(create_time) as create_time from t_assista
  • 最近遇到个统计报表的需求,数据按照某个字段分组后,其他列最新一条数据的列。 数据库:mysql 在使用传统的查询后,发现order by 是无效的。相信各位童鞋也是一样的情况。 select id,gate_id,sum(vehicle_num) ...
  • mysql 没有row_number () OVER ( PARTITION BY xxx ORDER BY xxx desc)的功能,能通过变量实现这个功能。 set @rankNum:=0; set @CI:=null; select id,name,a_time,rank_num from( select id,name, @rankNum:= if...
  • 5.7版本的mysql无法用窗口函数,不能直接做到分组后,组内排序,项目中为了获取每组的降序第一名,实现思路如下: 上图是模拟数据, ```sql SELECT * FROM ( SELECT `name`, money, times FROM syc ORDER BY ...
  • SELECT c.time,MIN(c.band) mi ... SELECT a.bandwidth band,a.create_time time FROM tb1 a LEFT JOIN tb1 b ON a.create_time = b.create_time AND a.bandwidth < b.bandwidth WHERE a.create_time BETWEE...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,234
精华内容 22,493
关键字:

mysql分组排序取第一条

mysql 订阅