MySQL分组排序(取第一或最后)
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分组排序(取第一或最后)的更多相关文章
- mysql分组排序取最大值所在行,类似hive中row_number() over partition by
如下图, 计划实现 :按照 parent_code 分组, 取组中code最大值所在的整条记录,如红色部分.(类似hive中: row_number() over(partition by)) sel ...
- mysql 分组排序取最值
查各个用户下单最早的一条记录 查各个用户下单最早的前两条记录 查各个用户第二次下单的记录 一.建表填数据: SET NAMES utf8mb4; -- 取消外键约束 ; -- ------------ ...
- mysql 分组排序前n + 长表转宽表
MySQL数据库优化的八种方式(经典必看) 建表 CREATE TABLE if not EXISTS `bb` ( `id` int not null primary key auto_increm ...
- mysql分组排序加序号(不用存储过程,就简简单单sql语句哦)
做前端好长时间了,好久没动sql了.在追一个喜欢的女孩,做测试的,有这么个需求求助与本屌丝,机会难得,开始折腾起来,配置mysql,建库,建表.... 一 建表 CREATE TABLE `my_te ...
- mySql分组排序
mysql 排序学习---mysql 1.建表语句 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varc ...
- SQL之分组排序取top n
转自:http://blog.csdn.net/wguangliang/article/details/50167283 要求:按照课程分组,查找每个课程最高的两个成绩. 数据文件如下: 第一列no为 ...
- MYSQL 分组排序
http://www.cnblogs.com/merru/articles/4626045.html SELECT a.shop_id, a.price, count(*) as rankFROM m ...
- mysql 分组后取每个组内最新的一条数据
首先,将按条件查询并排序的结果查询出来. mysql order by accepttime desc; +---------------------+------+-----+ | acceptti ...
- [转] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit
前言: 同事的业务场景是,按照cid.author分组,再按照id倒叙,取出前2条记录出来. oracle里面可以通过row_number() OVER (PARTITIO ...
随机推荐
- Servlet技术——request、respone详解
Servlet之request.respone详解 Request (一) 概述 request是Servlet.service()方法的一个参数,在客户端发出每个请求时,服务器都会创建一个reque ...
- SQL SERVER 实现多行转多列
有这样一个需求,一个表单主表,一个扩展列表,查询的时候要把扩展列表中的多行转成主表多列. 比如 dt_zhubiao [主表] id type title 1 1 表单1-1 2 1 表单1-2 3 ...
- Python--yaml文件操作
一.yaml文件的使用注意事项 加载yaml文件函数: data = yaml.load(f) (我在实际测试中用的是yaml.safe_load(f)可以正常,用yaml.load(f)会报错因为 ...
- 1269: 划分数(Java)
WUSTOJ 1269: 划分数 参考博客 果7的博客 题目 将 1 个数 n 分成 m 份,求划分的种数.更多内容点击标题. 分析 唯一需要注意的地方是不考虑顺序.其他的直接看代码即可. 代 ...
- JVM 利用 VisualVM 对高并发项目进行性能分析(转)
出处: 深入理解 Java 虚拟机-如何利用 VisualVM 对高并发项目进行性能分析 前面在学习JVM的知识的时候,一般都需要利用相关参数进行分析,而分析一般都需要用到一些分析的工具,因为一般使 ...
- java中的自动装箱和拆箱
一.什么是自动装箱和拆箱: 我们知道java为8种基本类型分别提供了对应的包装类型,在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: Integer i=new I ...
- (二)手动配置第一个HelloWorld程序
上例的HelloWorld是由Android sutudio 自动生成的,现在我们手动来配置. 1. 重新创建工程 2. 创建空的Activity 生成的MainActivity.java 文件: p ...
- POJ2729 Robocode(离散化与模拟-----提醒曾经爱玩游戏的自己没做出这个
题目链接 :http://poj.org/problem?id=2729 题目很长,有不少也是废话.类似小时候玩的坦克大战.每个坦克速度为10,炮弹速度为20.子弹出界就消失,坦克出不了界限.相向的子 ...
- CentOS7使用yum安装PostgreSQL和PostGIS
更新yum源 CentOS7默认yum源的PostgreSQL版本过低,不适合在本版本上使用.在https://yum.postgresql.org/repopackages.php上找到适合Cent ...
- Docker安装nginx,把nginx.conf放入指定位置
拉取镜像 docker pull nginx 创建目录 创建一个目录用来存放文件,方便我们进行修改 mkdir -p /everything/nginx/conf /everything/nginx/ ...