当前位置:网站首页>多表查询最值
多表查询最值
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博客
边栏推荐
- SwinIR combat: record the training process of SwinIR in detail
- 2022爱分析· 银行数字化厂商全景报告
- node连接mongoose数据库流程
- 【数仓】数据质量监控
- 九种方法!教你如何读取resources目录下的文件路径
- C专家编程 第3章 分析C语言的声明 3.3 优先级规则
- sphinx coreseek的安装和php下使用
- 高效的组织信息共享知识库是一种宝贵的资源
- [Unity Getting Started Plan] Basic Concepts (6) - Sprite Renderer Sprite Renderer
- 使用.NET简单实现一个Redis的高性能克隆版(一)
猜你喜欢

protobuf 反射使用总结

组件通信--下拉菜单案例

【Metaverse系列一】元宇宙的奥秘

华为、联想、北汽等入选工信部“企业数字化转型和安全能力提升”首批实训基地

大型企业数据治理的现状和解决方案有哪些参考?_光点科技

C专家编程 第1章 C:穿越时空的迷雾 1.9 阅读ANSI C标准,寻找乐趣和裨益

Understand the recommendation system in one article: Outline 02: The link of the recommendation system, from recalling rough sorting, to fine sorting, to rearranging, and finally showing the recommend

LeetCode·1163.按字典序排在最后的子串·最小表示法

PTA递归练习

JS中对象数组用sort按属性排序
随机推荐
“LaMDA 存在种族歧视,谷歌的 AI 伦理不过是‘遮羞布’!”
5. Longest Palindromic Substring
基于DMS的数仓智能运维服务,知多少?
为什么我用了Redis之后,系统的性能却没有提升
J9数字虚拟论:元宇宙的潜力:一股推动社会进步的力量
从MatePad Pro进化看鸿蒙OS的生态势能
SwinIR实战:如何使用SwinIR和预训练模型实现图片的超分
附录A 程序员工作面试的秘密
“68道 Redis+168道 MySQL”精品面试题(带解析),你背废了吗?
JS 字符串转 GBK 编码超精简实现
C语言02、语句、函数
高效的组织信息共享知识库是一种宝贵的资源
设置海思芯片MMZ内存、OS内存详解
【There is no tracking information for the current branch. Please specify which branch you want to 】
C专家编程 第2章 这不是Bug,而是语言特性 2.3 误做之过
leetcode:202. 快乐数
兄弟组件通信context
学会 Arthas,让你 3 年经验掌握 5 年功力!
【Metaverse系列一】元宇宙的奥秘
沃尔沃:这是会“种草”的“安全感”!