多表查詢最值

2021-10-09 17:30:19 字數 2284 閱讀 8541

今天處理業務的時候遇到乙個問題,簡單一點描述就是多表查詢取最值的問題,我用乙個類似的場景來重現這個問題:

查詢各個使用者最近一次登入時間(使用的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

1from

t_login_log as t3

where

t2.user_id = t3.user_id

and t2.login_time < t3.login_time

)

查詢結果如下:

這個sql其實也非常的簡單,最關鍵的就是where not exists的處理,也就是乙個子查詢,之前寫過一篇部落格也是類似的場景,可以翻閱一下,這裡就不贅述了。

傳送門:sql分組查詢最值 

多表查詢 多表查詢 多表查詢

查詢語法 select 列表名稱 from 表明列表 where 笛卡爾積 有兩個集合a,b,取這兩個集合的所有組成情況 要完成多表查詢,需要消除無用的資料 多表查詢分類 1 內連線查詢 1 隱式內連線 使用where消除無用的資料 例子 select t1.name,t1.gender,t2.na...

sql多表查詢分組最大值

問題描述 有三張表 學生表student id,name id為主鍵 課程表subject id,name id為主鍵 分數表score studentid,subjectid,score 其中studentid與subjectid為聯合主鍵,一句sql語句查詢出 學號,姓名,課程名,課程最高分.模...

mysql 多表查詢or MySQL 多表查詢

前期準備 建表create table dep id int,name varchar 20 create table emp id int primary key auto increment,name varchar 20 enum male female not null default ma...