如何使用sql显示哪些学生仍在学校
此表显示了学生进出学校的记录。IN代表入学学生,OUT代表离校学生。我想知道如何显示哪些学生还在上学如何使用sql显示哪些学生仍在学校,sql,Sql,此表显示了学生进出学校的记录。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,
我试了这么多,但还是弄不明白,有人能帮我吗,非常感谢
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。学校的学生人数是入学人数减去毕业人数之和:
select sum(case when status = 'in' then 1
when status = 'out' then -1
else 0
end)
from student;
基本上,要查看在校学生,您需要最后状态为的学生。一种方法使用相关子查询:
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';
如果
状态
仅为输入
或输出
您不能这样做吗
SELECT*from student WHERE status=“IN”
以下是考虑自动递增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'
非常感谢,但是如果我需要出示还在学校的学生证,我该怎么办