MySQL分组排序(取第一或最后)

方法一:速度非常慢,跑了30分钟

SELECT
custid,
apply_date,
rejectrule
FROM
(
SELECT
*,
IF
( @pkey <> custid, @rank := 1, @rank := @rank + 1 ) AS rank,
@pkey := custid
FROM
(
SELECT
custid,
createTime,
SUBSTR( createTime, 1, 10 ) AS apply_date,
rejectRule,
STATUS
FROM
(
SELECT
*
FROM
credit.`apply`
WHERE
SUBSTR( createTime, 1, 10 ) >= '2019-10-26'
AND custid <> ""
AND SUBSTR( custid, 1, 2 ) = ''
) t1,
( SELECT @pkey := 0, @rank = 0 ) t2
) t
ORDER BY
custid,
createTime DESC
) a
HAVING
rank = 1
AND STATUS <> 1 LIMIT 100;

方法二:非常快,约为1分钟

SELECT
custid,
apply_date,
rejectrule ,
STATUS
FROM
(
SELECT
custid,
apply_date,
rejectrule,
STATUS
FROM
(
SELECT
custid,
CASE
WHEN locate( '|', statuss ) > 0 THEN
SUBSTR( statuss, 1, INSTR( statuss, '|' )- 1 ) ELSE statuss
END AS STATUS,
CASE
WHEN locate( '|', apply_dates ) > 0 THEN
SUBSTR( SUBSTR( apply_dates, 1, INSTR( apply_dates, '|' )- 1 ), 1, 10 ) ELSE SUBSTR( apply_dates, 1, 10 )
END AS apply_date,
CASE
WHEN locate( '|', rejectrules ) > 0 THEN
SUBSTR( rejectrules, 1, INSTR( rejectrules, '|' )- 1 ) ELSE rejectrules
END AS rejectrule
FROM
(
SELECT
custid,
group_concat( STATUS ORDER BY createTime DESC SEPARATOR '|' ) AS statuss,
group_concat( SUBSTR( createTime, 1, 10 ) ORDER BY createTime DESC SEPARATOR '|' ) AS apply_dates,
group_concat( rejectrule ORDER BY createTime DESC SEPARATOR '|' ) AS rejectrules
FROM
credit.`apply`
WHERE
SUBSTR( createTime, 1, 10 ) >= '2019-07-26'
AND custid <> ""
AND SUBSTR( custid, 1, 2 ) = ''
GROUP BY
custid
) t
) tt
) b
WHERE
apply_date >= '2019-10-12'
AND STATUS <> 1 LIMIT 100;

因为可能数据很多group_concat()可能会超长,解决方案见博客

方法三:

MySQL新版本已经支持窗口函数:mysql8.0

select custid,createTime,status,rejectrule
(
SELECT RANK() OVER (PARTITION BY custid ORDER BY createTime desc ) AS rank1,
custid,
createTime ,
status,
rejectrule
FROM credit.apply
) T
where rank1=1;

MySQL分组排序(取第一或最后)的更多相关文章

  1. mysql分组排序取最大值所在行,类似hive中row_number() over partition by

    如下图, 计划实现 :按照 parent_code 分组, 取组中code最大值所在的整条记录,如红色部分.(类似hive中: row_number() over(partition by)) sel ...

  2. mysql 分组排序取最值

    查各个用户下单最早的一条记录 查各个用户下单最早的前两条记录 查各个用户第二次下单的记录 一.建表填数据: SET NAMES utf8mb4; -- 取消外键约束 ; -- ------------ ...

  3. mysql 分组排序前n + 长表转宽表

    MySQL数据库优化的八种方式(经典必看) 建表 CREATE TABLE if not EXISTS `bb` ( `id` int not null primary key auto_increm ...

  4. mysql分组排序加序号(不用存储过程,就简简单单sql语句哦)

    做前端好长时间了,好久没动sql了.在追一个喜欢的女孩,做测试的,有这么个需求求助与本屌丝,机会难得,开始折腾起来,配置mysql,建库,建表.... 一 建表 CREATE TABLE `my_te ...

  5. mySql分组排序

    mysql 排序学习---mysql 1.建表语句 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varc ...

  6. SQL之分组排序取top n

    转自:http://blog.csdn.net/wguangliang/article/details/50167283 要求:按照课程分组,查找每个课程最高的两个成绩. 数据文件如下: 第一列no为 ...

  7. MYSQL 分组排序

    http://www.cnblogs.com/merru/articles/4626045.html SELECT a.shop_id, a.price, count(*) as rankFROM m ...

  8. mysql 分组后取每个组内最新的一条数据

    首先,将按条件查询并排序的结果查询出来. mysql order by accepttime desc; +---------------------+------+-----+ | acceptti ...

  9. [转] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit

    前言:        同事的业务场景是,按照cid.author分组,再按照id倒叙,取出前2条记录出来.        oracle里面可以通过row_number() OVER (PARTITIO ...

随机推荐

  1. springboot集成elk 四:springboot + Elasticsearch+Jest

    依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri ...

  2. WebElement的方法:

    这个类代表HTML页面元素 id_ #当前元素的ID tag_name #获取元素标签名的属性 text #获取该元素的文本. click() #单击(点击)元素 submit() #提交表单 cle ...

  3. 位带操作—GPIO输出和输入

    GPIOC->ODR |=(0<<2);  // 总线操作,即操作整个寄存器. 在51单片机中 P0=0xFE;   //总线操作. sbit LED1=P0^0;  //位操作,即 ...

  4. 导入别的项目到我的eclipse上出现红色感叹号问题

        项目红色感叹号问题问题 一般我们在导入别的项目到我的eclipse上面会发现,项目上面有红色的错误     原因 因为我电脑上的 jdk版本和别人电脑jdk版本不一样,那么对于的jre版本也不 ...

  5. win7+cuda+anaconda python+tensorflow-gpu+keras安装成功版本匹配汇总

    win7+cuda+anaconda python+tensorflow-gpu+keras安装成功版本匹配汇总 2019-09-20 15:06:03 wyx100 阅读数 38更多 分类专栏: M ...

  6. Spring邮件服务:Maven + Spring SMTP Mail (可发送附件)

    1  spring-smtp-mail.xml <?xml version="1.0" encoding="UTF-8"?> <beans x ...

  7. (三)CXF之处理输入参数与输出类型为复杂类型的webService服务

    一.需求 调用webService服务,把用户名和密码封装为用户对象作为参数,返回该用户所用友的角色列表. 二.发布服务 2.1 编写服务接口 @WebService public interface ...

  8. (五)Maven中的聚合和继承

    一.为什么要聚合? 定义:我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我 ...

  9. XML-RPC-1概述

    XML-RPC是一个远程过程调用(远端程序呼叫)(remote procedure call,RPC)的分布式计算协议,通过XML将调用函数封装,并使用HTTP协议作为传送机制.   中文名 XML- ...

  10. 关于js异步的一些知识点

    1,什么是单线程,和异步有什么关系 单线程-只有一个线程,只能做一件事 单线程的原因:避免DOM 渲染的冲突 浏览器需要渲染DOM JS 可以修改DOM 结构 JS 执行的时候,浏览器DOM 渲染会暂 ...