如何在MariaDB中查询Joseph入住前的上一位已离开房间人员?
解决方案
假设你的房间进出记录表结构大致如下(如果实际字段名不同,对应替换即可):
CREATE TABLE room_records ( id INT AUTO_INCREMENT PRIMARY KEY, person_name VARCHAR(50) NOT NULL, enter_time DATETIME NOT NULL, leave_time DATETIME NOT NULL );
要查询Joseph在2022-04-16 13:55:24进入房间前,最后一位已离开的人员,可以用以下SQL语句:
SELECT person_name, enter_time, leave_time FROM room_records WHERE leave_time < '2022-04-16 13:55:24' ORDER BY leave_time DESC LIMIT 1;
逻辑拆解
WHERE leave_time < '2022-04-16 13:55:24':筛选出所有在Joseph进入房间前就已经完成离开操作的记录ORDER BY leave_time DESC:按离开时间倒序排列,让最近离开的记录排在最前面LIMIT 1:只取排序后的第一条结果,也就是最后一位离开房间的人员
如果需要动态关联Joseph的进入记录(不用硬写时间),可以用子查询先获取他的进入时间:
SELECT r.person_name, r.enter_time, r.leave_time FROM room_records r WHERE r.leave_time < ( SELECT enter_time FROM room_records WHERE person_name = 'Joseph' AND enter_time = '2022-04-16 13:55:24' ) ORDER BY r.leave_time DESC LIMIT 1;
额外说明
- 如果有多人在同一时间离开,
LIMIT 1只会返回其中一个,若需要全部返回可去掉该语句 - 确保
enter_time和leave_time字段为DATETIME或TIMESTAMP类型,否则日期比较会失效 - 如果Joseph是房间的第一位使用者,查询结果会为空,符合业务逻辑
内容的提问来源于stack exchange,提问作者kernel
相关产品推荐
相关产品推荐

