mysql 分组取第一条_「MySQL数据库」mysql 分组取最大时间(分组取最新数据)

Bili今天做汽车gps定位时写了一段获取最新位置的sql语句,对于新手MySQL学

习及领悟很有帮助,就分享给大家了!!

由于保密条例的限制,只能找其他例子给大家讲了

65e77fea02e25a63ae482494bb59e8ae.png

我们在查询数据时,需要分组后取每组中的最新一条数据(即时间最大的那条)

  • 复制如下 sql 语句建表,添加数据
/*Navicat MySQL Data TransferSource Server : localhostSource Server Version : 50719Source Host : localhost:3306Source Database : jinguiTarget Server Type : MYSQLTarget Server Version : 50719File Encoding : 65001Date: 2019-10-06 14:35:57*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for test-- ----------------------------DROP TABLE IF EXISTS `test`;CREATE TABLE `test` ( `id` int(11) NOT NULL, `company_name` varchar(255) DEFAULT NULL, `type` varchar(255) DEFAULT NULL, `create_date` datetime DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of test-- ----------------------------INSERT INTO `test` VALUES ('1', '腾讯', '1', '2019-10-06 14:06:48');INSERT INTO `test` VALUES ('2', '阿里巴巴', '1', '2019-10-18 14:35:11');INSERT INTO `test` VALUES ('3', '百度', '1', '2019-10-06 14:35:16');INSERT INTO `test` VALUES ('4', '小米', '0', '2019-10-26 14:35:20');INSERT INTO `test` VALUES ('5', '华为', '0', '2019-10-06 14:35:25');INSERT INTO `test` VALUES ('6', '农业银行', '2', '2019-10-06 14:35:28');INSERT INTO `test` VALUES ('7', '工商银行', '2', '2019-10-10 14:35:32');INSERT INTO `test` VALUES ('8', '兴业银行', '2', '2019-10-23 14:35:36');INSERT INTO `test` VALUES ('9', '浦发银行', '3', '2019-10-06 14:35:40');INSERT INTO `test` VALUES ('10', '贵州茅台', '3', '2019-10-06 14:35:44');
  • 建表如下
6b93e570bca59c8ee6e1322a1bc13631.png

查询思路: 先分组使用 max() 函数查询出每组中最大的时间和类型,将时间字段和类型字段定义为一个新表 tmp,再通过与 tmp 表的时间和类型联合查询,即可查询出每组中的最新一条数据(时间最大的那条数据)。之所以要使用时间和类型两个字段,是因为可能存在不同类型但时间相同的数据

  • sql 语句如下
select * from test t RIGHT JOIN (select type, MAX(create_date) as "createDate" from test GROUP BY type) tmp on (t.create_date = tmp.createDate and t.type=tmp.type)
  • 查询结果
c2a8615cfd0f3c61fb6f3e8016288152.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值