这个表格显示了学生进出学校的记录。IN表示学生进入学校,OUT表示学生离开学校。我想知道如何显示哪些学生还在上学。
我试了这么多,还是想不通,有没有人能帮我,非常感谢。
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL auto_increment,
`time` varchar(128) default NULL,
`status` varchar(128) default NULL,
`stu_id` varchar(128) default NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `student` (`id`, `time`, `status`, `stu_id`) VALUES
(1,'11AM','IN','1'),
(2,'11AM','IN','2'),
(3,'12AM','OUT','1'),
(4,'12AM','IN','3'),
(5,'1PM','OUT','3'),
(6,'2PM','IN','3'),
(11,'2PM','IN','4');我想答案是2,3,4
发布于 2019-08-07 09:05:09
学校的学生人数是学生人数之和减去学生人数之和:
select sum(case when status = 'in' then 1
when status = 'out' then -1
else 0
end)
from student;基本上,为了查看学校中的学生,您需要最后一个状态为in的学生。一种方法是使用相关子查询:
select s.stu_id
from student s
where s.time = (select max(s2.time)
from student s2
where s2.stu_id = s.stu_id
) and
s.status = 'in';发布于 2019-08-07 09:06:56
如果status仅为IN或OUT,则不能执行SELECT * from student WHERE status="IN"
发布于 2019-08-07 09:17:43
下面是考虑自动增量id的查询
select t2.* from
student t2
left join (select ROW_NUMBER() OVER(PARTITION by stu_id ORDER BY id desc) as row_num, id from student) t1 on t1.id = t2.id
where t1.row_num = 1 and [status] = 'IN'https://stackoverflow.com/questions/57385713
复制相似问题