精华内容
下载资源
问答
  • 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;

     

     

     

     

    展开全文
  • sql 排序 ROW_NUMBER() OVER 函数这是我之前写的sql排序函数,现在的需求是mysql 分组,组内排序并且取第一条数据mysql用子查询实现类似于row_number()函数的功能 场景: versionId=0时,是默认版本,即该记录...

    sql 排序 ROW_NUMBER() OVER 函数这是我之前写的sql排序函数,现在的需求是mysql 分组,组内排序并且取第一条数据。

    mysql用子查询实现类似于row_number()函数的功能
    场景: versionId=0时,是默认版本,即该条记录适用于所有版本。versionID非0时是固定版本(如:91635),如果请求固定版本,且该pa geType下存在默认版本的数据,优先显示固定版本数据;如果不存在固定版本数据,有默认版本时显示默认版本。

    下面的sql仅用于举例,命名不规范

    select *  from menu where is_delete = 0
    

    查询结果:
    在这里插入图片描述
    目的:按照pageType分组,组内按照versionId倒叙(固定版本版本号一定大于默认版本),取第一条。

    step1:子查询,组内部的排序

     SELECT
    	menuId,
    	NAME,
    	pageType,
    	versionId 
    FROM
    	menu 
    WHERE
    	is_delete = 0 
    ORDER BY
    	pageType,
    	versionId DESC 
    	LIMIT 1000  //limit 的作用是保持子查询中的自定义排序,否则会按照ID排序
    

    查询结果:
    在这里插入图片描述
    step2:取第一条,按照pageType分组

    SELECT a.* FROM
    	(
    	SELECT menuId,NAME,pageType,versionId  
    	FROM
    		layout_management_hamburger h
    		RIGHT JOIN gp_banner_version v ON h.id = v.event_id 
    	WHERE
    		h.STATUS = 1 
    		AND h.channel_id = 1001 
    		AND v.version_id IN ( 0, 91635 ) 
    		AND v.type = 3 
    		AND v.is_delete = 0 
    	ORDER BY
    		pageType,
    		versionId DESC 
    		LIMIT 1000 
    	) a 
    GROUP BY
    	pageType;
    

    结果:
    在这里插入图片描述
    如果pageType为2,只配置默认版本,请求固定版本91635也会查到默认版本:
    在这里插入图片描述

    其实不想把逻辑写在s q l中,如有相同场景的其他解决思路记得小窗哈。

    展开全文
  • select * from table_name where column_name=#{xxx} order by column_name limit 1 ; select * from table_name where column_name=#{xxx} order by ...比如 limit 3,是从查出来的结果中 前3条数据; 而limit 0,3 是

    select * from table_name where column_name=#{xxx} order by column_name limit 1 ;
    select * from table_name where column_name=#{xxx} order by column_name limit 0,1;

    limit 1 与 limit 0,1 是一样的!
    换句话说,

    比如 limit 3,是从查出来的结果中取 前3条数据;
    而limit 0,3 是取
    第0,
    第1,
    第2条 数据,
    也是三条数据

    所以 LIMIT n 等价于 LIMIT 0,n

    展开全文
  • 比如每个班级成绩第一的学生等等 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)

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

    展开全文
  • MySQL分组排序取第一数据的方法

    千次阅读 2019-02-25 23:23:14
    需求分析:多行数据分组排序之后,如何获取第一数据?具体案例如下: 根据要求查询结果: 查询结果username不能重复; username重复的选择条件是status为1则选择该,多个1则按照createtime选取最近的一; ...
  • 最近遇到个统计报表的需求,数据按照某个字段分组后,其他列最新一条数据的列。 数据库:mysql 在使用传统的查询后,发现order by 是无效的。相信各位童鞋也是一样的情况。 select id,gate_id,sum(vehicle_num) ...
  • mysql分组查询取第一条数据 在做项目时遇到了,mysql分组查询取第一个的需求 表结构如下 需求是根据code分组,每组中版本号最大的数据 方案一 SELECT t.* FROM ( SELECT code, max( version ) AS version...
  • 有一张这样的数据表, 需求是根据error_type分组然后status最小的第一条数据 第一种写法: select t.* from ( select e.* from error_record e where e.status > 0 and e.error_type > 0 order ...
  • mysql 分组排序前n条数据

    千次阅读 2019-04-28 20:05:02
    通用模板: select a.* from ( select t1.*,(select count(*)+1 from 表 where 分组字段=t1.分组字段 and 排序字段<t1.排序字段) as group_id from 表 t1 ) a where a.group_id<=3 # 假设前3 ...
  • 如图,如果我们按 number 分组后再按 is_bak 从大到小排序获取最大的第一条数据,那么最后结果就是 id 为 1,4,6 这 3 。 select t.* from ( select distinct(id) as tt,t1.* from a_t as t1 order by is_bak ...
  • mysql group by 函数 分组后排序取第一条数据 select aa.* from 你的操作的表名 as aa right join ( select 分组的那一列列名, max(排序的那一列列名+0) as max from 你的操作的表名 group by 分组的那一列列名 ...
  • -- 按pay_time排序,查询pay_amount的第一条 select cust_id,outer_id,substring_index(group_concat(pay_amount order by pay_time asc),",",1) as first_trade_money from tableName WHERE (cust_id in (271427)...
  • mysql分组排序取时间最近的第一条

    千次阅读 2020-04-29 10:30:03
    起因:需要对一张表数据进行分组排序,不同设备最新的一条更新记录,那么问题来了, 表数据经过简单Group By 之后,所获取到的 数据与期望数据不一致, 如图不同vem_id的最新次的更新数据,常规group by 无法解决...
  • mysql排序分组 组里面最新一条数据

    万次阅读 热门讨论 2018-08-20 11:38:09
     一般写sql 先排序在分组最新的一条数据 不外乎  SELECT p.* FROM (SELECT * FROM sys_message ORDER BY id DESC )p GROUP BY p.messageType ORDER BY id desc  但是这样 还是得不到 分组里面最新的一条...
  • mysql查询排序后的条数据 两种写法: select b.emp_no,b.birth_date,b.first_name,b.last_name,b.gender,b.hire_date from ( select *,(@rowno:=@rowno+1) as no from (select * from 表名 order by hire_date ...
  • Mysql取分组后的每组第一条数据 gruop by 分组后 进行 order by mysql会按照 先分组后排序的形式进行输出 并不能做到每组中的第一条数据取出。 我的思路是 : 先将要查询的数据表转换成已经排序的临时表 在进行 分组...
  • mysql 排序语句的写法,网上真是林林总总,但能用的不多。甚至有很多写法,从语法上看,就根本没有排序的样子。 求人不如求己,自己来吧。 有两种写法: 1.根据需要调整正序还是倒序 select * from tabnamexxxx...
  • 个score表,查询每科课程成绩排前3的课程id、学生名称、学生分数。 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for score -- ----------------...
  • 在开发的时候,遇到一个业务。需要在用户登录之后,看到自己的投票记录排在第一位。...采用Mysql自带的排序方法,代码如下: select * from tb_user order by case where user_id=1 then 1 e...
  • 一、按name分组,val排序(这里是最大值),取第一条数据 --方法1: select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a...
  • MAX(max.line) lineMax FROM ( SELECT DISTINCT (a.id) tt, a.* FROM student a ORDER BY a.line DESC ) max GROUP BY student_id DISTINCT(主键)让数据集先进行排序再分组取排序后的第一条 ...
  • 1.首先利用条件筛选出基本数据SELECT * from test where columna = 'xxx' AND columnb = 'xxx' and ......2.对基本数据分组并利用SUBSTRING_INDEX和GROUP_CONCAT函数取出需要的字段SELECT tab1.columnc, tab1....
  • 问题描述 数据分页时需要根据数据记录创建时间create_time字段倒序,即使用order by create_time desc limit ?,?,但是我们会发现,前端进行请求...后来,通过查看SQL发现,是根据时间进行排序的,然而 这个时间 恰...
  • select t.* from follow_details t ORDER BY t.add_time asc LIMIT 1;
  • MySQL分组然后每个分组中按照某些字段排序的topN条数据 建表 CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, `c` int(11) DEFAULT NULL, `itime` timestamp NOT NULL DEFAULT ...
  • 这里只介绍在表数据有顺序可排序(时间,数字大小等)的情况下的分组取第一或最后一条数据: https://blog.csdn.net/li_jian_fei/article/details/86162962
  • 今天遇到一个问题,将MySQL的sql语句改为Oracle的语句时,MySQL的select的未...依旧是的该组的第一条数据 测试代码如下: DROP TABLE IF EXISTS `test0511`; CREATE TABLE `test0511` ( `id` int(11) NULL DEFA

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 168,383
精华内容 67,353
关键字:

mysql排序取第一条数据

mysql 订阅