如何分组取最新的数据
今天有个朋友问我:mysql 根据某个id进行分组,每个分组按时间排序取最新的一条记录,除了使用row_number函数,是否还有其他方法?
其实这是个老生常谈的问题了 ,并且会经常出现在各种面试题中,我给了这个朋友几个方案,他几乎没怎么考虑就选了最后一个:
方案1:使用row_number,配合cte写法,具体就是: with t as (select *,row_number() over (partition by id order by update_time desc) as rn from table )select * from t where id=1
方案2:先按id分组找到最新的更新时间写到临时表 ,再和原表关联,
CREATE TEMPORARY TABLE tmp_table as select id,max(update_time) as update_time from table group by id; select * from table a join tmp_table b on a.id=b.id and a.update_time=b.update_time
方案3:使用子查询作为查询条件
select * from table a where a.update_time =(select max(b.update_time ) from table b where b.id=a.id)
方案4:从业务层面优化,在表上加一个字段,isnewdata,bit型或者int型就好,每次在表中提交数据时,事务中先将要提交的数据所涉及的id,将历史数据isnewdata=1的更新为0,新提交的数据,isnewdata为1,然后增加一个索引isnewdata,或者如果需要和其他表关联的时候,增加复合索引,性能一下就上来了。
以上方案中:方案1和方案2中规中矩,是大多数人的选择;方案3性能最差,但是也有一些习惯用子查询的人采用;方案4性能最好,只是需要对业务做一些改进。
如果业务数据量不大,最多就几万条,用方案1,2,3均可。数据量不超过100万行,方案1和2还能勉强顶住。超过100万行,就要从业务层面去优化了,此时选择方案4是明智的
如何分组取最新的数据相关推荐
- 分组取最新的一条数据
##分组取最新的一条数据,错误 SELECTa.account_balance,a.deposit_amount,a.deposit_time,a.create_user,a.resident_id, ...
- mysql分组分批_[Mysql]分组取最新一条
我有如下这张表的数据,需要根据mobile电话号码分组,每条电话取最新的数据 方案1: SELECT * from (SELECT * from model_online_forecastscore_ ...
- 用Python爬取最新股票数据含完整源代码
用Python爬取最新股票数据含完整源代码 抓取目标: url:http://webapi.cninfo.com.cn/#/marketDataDate 数据目标: 获取 证券代码 证券简称 交易日期 ...
- Hive实现将分组取top2的数据进行相减(SQL面试题)
1.问题描述 一张成绩表class有如下字段,班级ID,英语成绩,数学成绩,语文成绩 id english math chinese classid ...
- mysql分组取最新时间的数据
mysql分组后显示最新数据 方法一:NOT EXISTS SELECT e.GROUP_COLUMN, e.COMPARE_TIME FROM ...
- 联合查询分组取最新数据
场景: sql分组取最大优化 描述 同事今天遇到一个查询,一次有问题,让我帮忙查看,先上数据,有两张浏览表需要取到用户最新的浏览值数据结构如下 表一 CREATE TABLE `ums_member_ ...
- mysql 分组之后 取分组之后最新的数据
一.数据表设计 二.查询场景 统计每门课的考试次数.最新一次考试的时间.最新一次考试的录入成绩的老师 1.统计没门课的考试次数 #考试次数统计 select project '科目',count(pr ...
- mysql 分组取最新的一条记录(整条记录)
方法:mysql取分组后最新的一条记录,下面两种方法.一种是先筛选 出最大和最新的时间,在连表查询.一种是先排序,然后在次分组查询(默认第一条),就是最新的一条数据了 #select * from t ...
- mysql子查询 分组,Mysql子查询实现分组取最指定数据的版本差异
mysql通过group by 分组子查询时,会自动保留最先搜索出来的数据.通过这个特性可以实现想要的结果,比如查询每科目考试第一名的同学成绩.查询每班最后一名到校的学生或者或者每班最先到校的学生.所 ...
最新文章
- mysql MDL锁如何解决_MySQL元数据锁MDL
- 【java】实现一个简单的正则:判断一个字符串是否全由数字组成
- JQ 实现点击按钮显示弹窗,点击非弹窗和按钮区域隐藏弹窗
- 独立看门狗---STM32----HAL
- 没有varselect这个函数_JavaScript学习笔记(四)-- 函数基础
- 03、三种简单的计时器
- opencv之求轮廓的凸包
- JavaWeb学习 第7章 Session 会话编程
- 鼠标屏幕取词技术的原理和实现 (转)
- js 使用Rsa 加密 解密
- outlook怎么配置126邮箱服务器,126邮箱如何设置Microsoft Outlook的服务器?
- github 提交消息的emoji表情符号规范
- 免费的.netFramework 混淆工具 Babel obfuscator GUI
- iOS-底层原理 19:KVC探索
- Stable Diffusion 2.0来了,皮卡智能AI早已“抢先”优化升级
- 在线pdf转换成word转换器怎么样
- 邮件服务器之Webmail
- Markdown文本目录生成、页内跳转
- 家庭理财及基金常识了解
- 二叉堆简单实现与应用
热门文章
- 计算机应用技术题,计算机应用技术复习题.doc
- 外服游戏服务器如何显示中文,避免国外服务器出现乱码的办法
- python调包师_为“Python调包侠” 画像
- 1_22_python基础学习_0518
- 【Linux】常用命令:网络、内存、cron 超详细介绍
- matlab 去条带噪声,一种图像条带噪声及坏线消除方法
- linux 视频壁纸,Plasma video wallpaper: KDE 4 视频壁纸
- Md5扩展攻击的原理和应用
- TJISE-APP 自动签到打卡
- VR智慧家装,给业主带来别样的家装体验!