当前位置:网站首页>多表查询最值
多表查询最值
2022-08-03 17:01:00 【欧菲斯集团】
多表查询取最值是一个很常见的场景,我用一个类似的场景来重现这个问题:
查询各个用户最近一次登录时间(使用的MySQL)
这里给定两个表,t_user用户表以及t_login_log登录日志表,结构如下
CREATE TABLE `t_user` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `t_user` VALUES ('1', '张三');
INSERT INTO `t_user` VALUES ('2', '李四');
INSERT INTO `t_user` VALUES ('3', '王五');
CREATE TABLE `t_login_log` (
`id` int(11) NOT NULL,
`user_id` int(11) DEFAULT NULL,
`login_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of t_login_log
-- ----------------------------
INSERT INTO `t_login_log` VALUES ('1', '1', '2020-08-23 14:26:26');
INSERT INTO `t_login_log` VALUES ('2', '1', '2020-09-26 14:26:58');
INSERT INTO `t_login_log` VALUES ('3', '1', '2020-09-23 15:50:47');
INSERT INTO `t_login_log` VALUES ('4', '1', '2020-09-23 15:50:48');
INSERT INTO `t_login_log` VALUES ('5', '1', '2020-09-04 15:51:02');
INSERT INTO `t_login_log` VALUES ('6', '1', '2020-10-01 15:51:11');
INSERT INTO `t_login_log` VALUES ('7', '2', '2020-09-01 15:51:22');
INSERT INTO `t_login_log` VALUES ('8', '2', '2020-09-12 15:51:28');
INSERT INTO `t_login_log` VALUES ('9', '2', '2020-10-01 15:51:35');
INSERT INTO `t_login_log` VALUES ('10', '2', '2020-09-18 15:51:42');
当然,肯定是以t_user表为主表,t_login_log为从表,这里直接贴出sql
查询各个用户最近一次登录时间:
SELECT
t1.id,
t1. NAME,
t2.login_time
FROM
t_user AS t1
LEFT JOIN t_login_log AS t2 ON t1.id = t2.user_id
WHERE
NOT EXISTS (
SELECT
1
FROM
t_login_log AS t3
WHERE
t2.user_id = t3.user_id
AND t2.login_time < t3.login_time
)
查询结果如下:
这个sql其实也非常的简单,最关键的就是WHERE NOT EXISTS的处理,也就是一个子查询,之前写过一篇博客也是类似的场景,可以翻阅一下,这里就不赘述了。
传送门:SQL分组查询最值 SQL分组查询最值_大锅睿的博客-CSDN博客
边栏推荐
- MobileVIT实战:使用MobileVIT实现图像分类
- 掌握Redis的Sentinel哨兵原理,可助你拿到25k的offer
- 学会 Arthas,让你 3 年经验掌握 5 年功力!
- 关于oracle表空间在线碎片整理
- J9货币论:数字经济为全球经济复苏注入力量
- Looking at the ecological potential of Hongmeng OS from the evolution of MatePad Pro
- error:Illegal instruction (core dumped),离线下载安装这个other版本numpy
- FinClip | July 2022 Product Highlights
- sphinx error connection to 127.0.0.1:9312 failed (errno=0, msg=)
- 华为、联想、北汽等入选工信部“企业数字化转型和安全能力提升”首批实训基地
猜你喜欢
FinClip | 2022 年 7 月产品大事记
产品-Axure9英文版,轮播图效果
国内首发可视化智能调优平台,小龙带你玩转KeenTune UI
使用deepstream消息发送功能的时候,检测框没有检测标签,No text labels of bboxes displayed with osd for deepstream-test5
使用.NET简单实现一个Redis的高性能克隆版(一)
SQL中对 datetime 类型操作
大型企业数据治理的现状和解决方案有哪些参考?_光点科技
C专家编程 第1章 C:穿越时空的迷雾 1.6 它很棒,但它符合标准吗
LeetCode·1163.按字典序排在最后的子串·最小表示法
通用型安全监测数据管理系统
随机推荐
protobuf 中数据编码规则
为什么我用了Redis之后,系统的性能却没有提升
使用Stream多年,collect还有这些“骚操作”?
MobileVIT实战:使用MobileVIT实现图像分类
leetcode:189. 轮转数组
阿里二面:没有 accept,能建立 TCP 连接吗?
[Unity Getting Started Plan] Basic Concepts (7) - Input Manager & Input Class
JS中对象数组用sort按属性排序
【数据库数据恢复】SqlServer数据库无法读取的数据恢复案例
通俗理解apt-get 和pip的区别是什么
工程仪器设备在线监测管理系统常见问题和注意事项
leetcode-每日一题899. 有序队列(思维题)
“LaMDA 存在种族歧视,谷歌的 AI 伦理不过是‘遮羞布’!”
TypeScript的配置文件tsconfig.json
FinClip | 2022 年 7 月产品大事记
掌握Redis的Sentinel哨兵原理,可助你拿到25k的offer
学会 Arthas,让你 3 年经验掌握 5 年功力!
303. Range Sum Query - Immutable
C专家编程 第1章 C:穿越时空的迷雾 1.8 ANSI C标准的结构
CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统