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. [转帖]nginx location配置详细解释

    nginx location配置详细解释 http://outofmemory.cn/code-snippet/742/nginx-location-configuration-xiangxi-exp ...

  2. 使用 IDEA 创建 maven 项目

    文章目录 第一步 第二步 第三步 目录结构的设置 看下 web.xml 配置文件 第一步 点击 maven : 勾选从模板创建 : 选择 webapp : 第二步 第三步 如果你自己对 maven 进 ...

  3. I2C初始化结构体详解

    typedef struct { uint32_t I2C_ClockSpeed; /*设置SCL时钟频,此值不低于40000*/ uint16_t I2C_Mode; /* 指定工作模式,可选I2C ...

  4. javaSE面试题总结

      目 录 第一章 初识Java 1 1. Java跨平台原理(字节码文件.虚拟机) 1 2. Java的安全性 1 3. Java三大版本 2 4. Java开发运行过程 2 5. Java开发环境 ...

  5. (一)第一个python语句、乘除法、获取用户输入、函数

    一.print语句 >>> print "hello World!!" python2 和python3 的print是不一样的,python3的print(“h ...

  6. WebSocket协议探究(序章)

    一 WebSocket协议基于HTTP和TCP协议 与往常一样,进入WebSocket协议学习之前,先进行WebSocket协议抓包,来一个第一印象. WebSocket能实现客户端和服务器间双向.基 ...

  7. ES6 Proise 简单理解

    Promise 这是ES6中增加的一个处理异步的对象. 传统变成写异步函数的时候,经常会遇到回调套回调: Promise 是异步编程的一种解决方案,比传统的解决方案 -----回调函数和事件----- ...

  8. 使用NSFileManager管理文件系统

    文件系统作为被所有进程使用的基本资源之一,在macOS和iOS中主要用于处理数据文件.应用程序以及与操作系统自身相关的持久存储. iOS中的文件系统格式为HFS Plus,macOS中的主要格式也是H ...

  9. leetcode-101. 判断对称树 · Tree + 递归

    题面 判断给定二叉树是否对称. Note : empty tree is valid. 算法 1. 根节点判空,若空,则返回true;(空树对称) 2. 根节点不空,递归判断左右子树.如果左右孩子都空 ...

  10. 【ASE高级软件工程】第二次结对作业

    重现baseline 我们选择重现CODEnn模型(论文:Deep Code Search),因为它结构简单.端到端可训练,且相比其它方法拥有较高的性能. Baseline原理 为了根据给定的quer ...