mysql分组区某列最后一条_[MySQL]MySQL数据库如何按某列分组排序后查询每个分组的最后一条数据?...
比如当前有如下的消息表(messages)及示例数据:
Id Name Other_Columns
-------------------------
1 A A_data_1
2 A A_data_2
3 A A_data_3
4 B B_data_1
5 B B_data_2
6 C C_data_1
按照以下SQL语句查询:
select * from messages group by name
得到的查询结果为:
1 A A_data_1
4 B B_data_1
6 C C_data_1
如何使用SQL语句查询每个分组的最后一条数据,如:
3 A A_data_3
5 B B_data_2
6 C C_data_1
方案一SELECT m1.*
FROM messages m1 LEFT JOIN messages m2
ON (m1.name = m2.name AND m1.id < m2.id)
WHERE m2.id IS NULL;
如果中MySQL 8.0中,可以使用 WITH 的语法(WITH语法文档),具体实现SQL语句如下:
WITH ranked_messages AS (
SELECT m.*, ROW_NUMBER() OVER (PARTITION BY name ORDER BY id DESC) AS rn
FROM messages AS m
)
SELECT * FROM ranked_messages WHERE rn = 1;
方案二
使用子查询
select
a.*
from
messages a
inner join
(select name, max(id) as maxid from messages group by name) as b on
a.id = b.maxid
如果不是以 id 列排序的,则指定其他列即可,如:
select
a.*
from
messages a
inner join
(select name, max(other_col) as other_col
from messages group by name) as b on
a.name = b.name
and a.other_col = b.other_col
方案三SELECT
Id, Name, OtherColumns
FROM messages
WHERE NOT EXISTS (
SELECT * FROM messages as M2
WHERE M2.Name = messages.Name
AND M2.Id > messages.Id
)
方案四SELECT jos_categories.title AS name,
joined .catid,
joined .title,
joined .introtext
FROM jos_categories
INNER JOIN (SELECT *
FROM (SELECT `title`,
catid,
`created`,
introtext
FROM `jos_content`
WHERE `sectionid` = 6
ORDER BY `id` DESC) AS yes
GROUP BY `yes`.`catid` DESC
ORDER BY `yes`.`created` DESC) AS joined
ON( joined.catid = jos_categories.id )
方案五SELECT
`Id`,
`Name`,
SUBSTRING_INDEX(
GROUP_CONCAT(
`Other_Columns`
ORDER BY `Id` DESC
SEPARATOR '||'
),
'||',
1
) Other_Columns
FROM
messages
GROUP BY `Name`
mysql分组区某列最后一条_[MySQL]MySQL数据库如何按某列分组排序后查询每个分组的最后一条数据?...相关推荐
- mysql语句优化百条_优化mysql语句
1.查询SQL尽量不要使用select *,而是select具体字段. 反例子:select * from employee; 正例子:select id,name from employee; 理由 ...
- MySQL 怎么插入10天前的日期_使用 MySQL 的 SQL_MODE 有哪些坑,你知道么?
(给数据分析与开发加星标,提升数据技能) 来源:陈臣 SQL_MODE是MySQL中的一个系统变量(variable),可由多个MODE组成,每个MODE控制一种行为,如是否允许除数为0,日期中是否允 ...
- mysql查询表中姓名第三个字_认识mysql(3)
认识mysql第三篇,发出的内容适合初学者,如果能持续关注我的博客,可以全面的掌握mysql的常用知识,后续我也会陆续发出python相关的知识,关注我,和我一共进步吧! 1.SQL查询 1.执行顺序 ...
- mysql排序后如何取最前和最后的数据_天天写order by,你知道Mysql底层如何执行吗?...
作者:不才陈某 前言 在实际的开发中一定会碰到根据某个字段进行排序后来显示结果的需求,但是你真的理解order by在 Mysql 底层是如何执行的吗?假设你要查询城市是苏州的所有人名字,并且按照姓名 ...
- 在mysql中删除表正确的是什么_在MySQL中删除表的操作教程
丢弃现有MySQL的表是很容易的.但是需要非常小心,删除任何现有的一个表后将无法恢复,因为数据丢失. 语法: 下面是通用的SQL语法丢弃(删除)MySQL表: DROP TABLE table_nam ...
- mysql 不同服务器不同库之间的访问_不同服务器数据库之间的数据操作
--创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogi ...
- mysql除了两列其他都选_从MySQL的两列中选择不同的名称,然后在单列中显示结果...
为此,请使用UNION.让我们首先创建一个表-mysql> create table DemoTable ( Name1 varchar(100), Name2 varchar(100) ); ...
- mysql选取除某一列的所有行_在 MySQL 中选择除了某一列以外的所有列
在 MySQL 中选择除了某一列以外的所有列 2020 年 1 月 23 日,由 Robert Gravelle 撰写 SQL通过SELECT *(SELECT ALL)子句使选择表中的所有字段变得非 ...
- mysql查询最新插入的一条_我刚数据库中插入一条记录,紧接着再去查询却查不到?...
向数据库 中奖记录表中 添加一条中奖 记录,马上调用方法查询这条记录, 查询不到! 我打开数据库查看 数据是插入成功的. 开发语言是用java, 框架 hibernate! 插入数据,和查询数据代码如 ...
最新文章
- ssm 异常捕获 统一处理_SpringMVC 统一异常处理介绍及实战
- OpenCV源码中Haar训练及特征提取的代码说明
- 在secureCRT软件上运行一些简单的python脚本
- 中间件及tomcat的内存溢出调优
- arthas jvm相关命令使用示例:jvm、sysprop
- 通过代码解决全角问题类调用法
- 关于DButil的使用几点思考
- 7-5 计算分段函数[3] (10 分)
- Git捷径,游戏搞定!
- 页面中的icon小图标,下载+设置
- win10不能访问服务器共享文件夹权限,win10没有权限访问共享文件夹(有效解决共享文件夹权限问题)...
- ccproxy 6.61 注册机(纯绿/傻瓜/真正去除线程限制)
- 网卡的功能主要有两个
- 什么是抓包?为什么要抓包?
- 【胡侃系列】基于多元回归模型的双十一购物狂欢节天猫商城销售额预测
- 未连接到互联网,检查代理服务器地址
- 网线直接插电脑能上网 接路由器就连不上了
- Vue - 实现信纸输入写作,类似写明信片时的一张背景图片 + 横格纸效果(信纸格子与文字自动对齐、支持自定义背景图、文字或横线大小与颜色,一切由您 DIY 自定义样式)纯CSS完成支持任何vue项目
- 【理论篇】IC间通信的时序模型——系统同步、源同步和自同步
- (十二)系统集成中级-质量管理
热门文章
- 网络演算(Networkcalculus)
- mysql从dos界面_从DOS界面进入MYSQL数据库
- 网络层常见知识点剖析
- javascript对象包含哪些要素_javascript有哪几种对象?
- 仪征市第二中学计算机老师,静心倾听花自开 ——仪征市第二中学徐丞老师
- java 调用scala 类_如何使用java类加载器调用带参数的scala函数?
- ZOJ 1586 QS Network
- ESP8266学习笔记6:ESP8266规范wifi连接操作
- 使用UIWebView载入本地或远程server上的网页
- 关系数据库的几种设计范式介绍