mysql取分组最新的一条_mysql group by之后取每个分组最新的一条
最近遇到一个需求就是需要从mysql中根据id查出一组数据,该组数据有36个类型,每种类型每天都会插入一条新的数据,然后我要拿每个类型的最新一条出来。
-- 首先我想的是,先按照类型分组,然后在按照时间去排序。
SELECT * FROM table r WHERE r.PAY_TABLE_ID='' GROUP BY r.PERIODS_NUMBER ORDER BY r.INSERT_DATE
-- 这样得出来的结果是最早更新进去的数据,并不是我要的最新的数据,这是为什么呢?我明明做了排序。
-- 上网查资料发现,是在分组之前数据库就默认得到了结果,然后我们在order by的时候就不会得到我们想要的结果。
第一种方法:根据上面的分析,我们要想得到想要的结果。
首先,使用GROUP_CONCAT函数 他可以设置分组的条件 在这里我们需要的条件就是时间最新的一条,语法如下:
-- 功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
-- 语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
-- 说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。
eg: SELECT GROUP_CONCAT(r.id ORDER BY r.INSERT_DATE DESC) FROM TABLE r WHERE r.PAY_TABLE_ID='' GROUP BY r.PERIODS_NUMBER ORDER BY r.INSERT_DATE
里面的id是我只查询id,然后条件就是插入时间倒叙,得到的结果就是把分组后的id都查询出来,但是我们只需要第一条,所以我们需要用到另外一个函数,没错!
第2步:SUBSTRING_INDEX截取函数 具体语法如下:
substring_index(str,delim,count)
str:要处理的字符串
delim:分隔符
count:计数
例如:str=www.wikibt.com
substring_index(str,'.',1)
结果是:www
substring_index(str,'.',2)
结果是:www.wikibt
也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容。相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容,如:
substring_index(str,'.',-2)
结果为:wikibt.com
本处:SELECT SUBSTRING_INDEX(GROUP_CONCAT(r.id ORDER BY r.INSERT_DATE DESC),',',1) FROM SQRZ_PAY_TABLE r WHERE r.PAY_TABLE_ID='' GROUP BY r.PERIODS_NUMBER ORDER BY r.INSERT_DATE
这样 我们就得到了根据时间倒叙,分组后最新的数据了,但是只有id显然不是我们想要的,所以,最后一步就是经常用的 in 查询 把数据全部查询出来
SELECT * from table w where w.id in (SELECT SUBSTRING_INDEX(GROUP_CONCAT(r.id ORDER BY r.INSERT_DATE DESC),',',1) FROM table r WHERE r.PAY_TABLE_ID='' GROUP BY r.PERIODS_NUMBER ORDER BY r.INSERT_DATE)
以上是网上查询所得的一种方法。
第二种方法:使用mysql DATEDIFF(date1,date2)
定义和用法:DATEDIFF() 函数返回两个日期之间的天数。
eg:SELECT * FROM table r WHERE r.id='' AND DATEDIFF(r.INSERT_DATE,DATE(NOW()))=0
两个时间相差为0,也就是当天,故此也能得到想要的最新的数据。
第三种方法,如果存入数据库的时间是"yyyy-MM-dd"格式的时间,可以使用str-to-date
mysql日期和字符相互转换方法
date_format(date,’%Y-%m-%d’) ————–>oracle中的to_char();
str_to_date('2020-01-19',’%Y-%m-%d’) ————–>oracle中的to_date();
%Y:代表4位的年份
%y:代表2为的年份
%m:代表月, 格式为(01……12)
%c:代表月, 格式为(1……12)
%d:代表月份中的天数,格式为(00……31)
%e:代表月份中的天数, 格式为(0……31)
%H:代表小时,格式为(00……23)
%k:代表 小时,格式为(0……23)
%h: 代表小时,格式为(01……12)
%I: 代表小时,格式为(01……12)
%l :代表小时,格式为(1……12)
%i: 代表分钟, 格式为(00……59) 【只有这一个代表分钟,大写的I 不代表分钟代表小时】
%r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)
%T:代表 时间,格式为24 小时(hh:mm:ss)
%S:代表 秒,格式为(00……59)
%s:代表 秒,格式为(00……59)
eg:SELECT * FROM table r WHERE r.id='' AND r.INSERT_DATE=str-to-date('2020-02-14','%Y-%m-%d')
mysql取分组最新的一条_mysql group by之后取每个分组最新的一条相关推荐
- mysql多个分类取n条_MySQL获取所有分类和每个分类的前N条记录
MySQL获取所有分类和每个分类的前N条记录.比如有文章表 test(Id,type,tiem),现在要用SQL找出每种类型中时间最新的前N个数据组成的集合,一段不错的代码,留存备用. SELECT ...
- oracle去重保留一条_mysql、oracle 去重(数据库删除重复数据保留一条)
现在在数据库中有2对重复数据,2条正常数据,我想要把重复数据都删掉 讲一下思路 根据重复字段分组,并增加约束条件,查询出所有的,重复数据的最小id,和重复的属性 SELECT uname,MIN(ui ...
- mysql group by 之后取每个分组最新的一条(或者按照自定义的规则排序)
mysql group by 之后取每个分组最新的一条(或者按照自定义的规则排序)_toString的博客-CSDN博客 select * from mt_customer_bind_info_ax ...
- mysql分组取日期最大的记录_mysql 分组 group by, 排序 取每条记录中,时间最大
mysql教程 分组 group by, 排序 取每条记录中,时间最大的一条记录 select a.* from test a, (select aid, max(day) max_day from ...
- mysql 取第一条_MySQL索引底层(一)索引底层原理
微信公众号:Java患者 专注Java领域技术分享 MySQL索引底层原理 局部性与页 在操作系统中,我们执行一个指令去磁盘取数据,那么他会从磁盘取出4KB数据,这个4KB就是一个局部单位,而这4KB ...
- MySQL5.7用group by分组根据组中某个字段的最大值求取那条记录(注意是整条记录)
首先注意,取每组最大的数据和取每组最大的一条记录是两个概念,前者很简单直接分组,max()即可.另外由于我的是5.7.24版本,5.7版本普遍存在一个问题,就是select的字段只能是group by ...
- mysql余额统计_实现按部门月卡余额总额分组统计的SQL查_mysql
陈优章的专栏 (原创,到现在为至最为复杂的SQL查询代码)实现按部门月卡余额总额分组统计的SQL查询代码(在Ms SQL Server中调试通过) SELECT dp.dpname1 AS 部门, c ...
- mysql删除重复数据只保留一条_mysql查找删除重复数据并只保留一条实例详解
有这样一张表,表数据及结果如下: school_id school_name total_student test_takers 1239 Abraham Lincoln High School 55 ...
- mysql语句 查询前5个_MySQL 查询语句--------------进阶5:分组查询
#进阶5:分组查询 /* select 分组函数,列(要求出现在group by的后面) from 表 [where 筛选条件] group by 分组的列表 [order by 子句] 注意: 查询 ...
最新文章
- php8支持哪些新特征,PHP8 新特性总结(一)
- 成功解决ImportError: [joblib] Attempting to do parallel computing without protecting your import on a sy
- Android 的全盘加密容易破解
- 201771010101 白玛次仁 《2018面向对象程序设计(Java)》第十三周学习总结
- 昇腾AI处理器软件栈--神经网络软件架构
- python测试驱动开发百度云_【有书共读】《Python测试驱动开发》读书笔记01
- df满足条件的值修改_如何用python实现熵值法求指标权重(实例)
- LeetCode 53.最大子序和(动态规划)
- 使用C++编程语言保存数据库查询结果的方法
- iOS逆向之利用Xcode重签名
- IDEA中写jsp代码没有提示
- [渝粤教育] 浙江工商大学 工程英语口语(王晓英) 参考 资料
- arcgis的lyr样式转qgis的sld样式
- uniapp 中使用彩色图标,引入阿里图库iconfont
- 小飞鱼平台介绍——小飞鱼开发者服务平台业务介绍
- 【科创人】快狗打车CTO沈剑:努力不会背叛,承担社会责任的企业胜算高一点点...
- springboot+成都大学校园植物网站 毕业设计-附源码181557
- c语言基础题库·第一章
- matlab算地形坡度,自然地形坡度分析、坡向分析的作用
- 基金转换——乾坤大挪移
热门文章
- 【python】自动登录51cto家园
- python打九九乘法表上三角下三角_python经典练习题之九九乘法表、打印菱形、打印对顶三角形、斐波拉契数列、素数... - 小黑电脑...
- 谈下最近做的一个手机app,学习到的东西挺多的哦
- 用PS怎样把一个字体居中整个图片
- 斐讯n1盒子装网易音乐命令版
- n918st能刷Android5吗?,中兴 N918st(V5S 双4G版)获取Root权限服务含精简系统方案
- 【接口自动化】3.写接口自动化case要注意的点
- 伦敦大学国王学院计算机学院官网,伦敦大学国王学院 King’s College London
- PR软件——音频变音(机器音)
- SQL经典50查询语句(面试题)案例2