首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sql显示哪些学生还在上学

如何使用sql显示哪些学生还在上学
EN

Stack Overflow用户
提问于 2019-08-07 09:03:24
回答 3查看 75关注 0票数 1

这个表格显示了学生进出学校的记录。IN表示学生进入学校,OUT表示学生离开学校。我想知道如何显示哪些学生还在上学。

我试了这么多,还是想不通,有没有人能帮我,非常感谢。

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

发布于 2019-08-07 09:05:09

学校的学生人数是学生人数之和减去学生人数之和:

代码语言:javascript
复制
select sum(case when status = 'in' then 1
                when status = 'out' then -1
                else 0
           end)
from student;

基本上,为了查看学校中的学生,您需要最后一个状态为in的学生。一种方法是使用相关子查询:

代码语言:javascript
复制
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';
票数 2
EN

Stack Overflow用户

发布于 2019-08-07 09:06:56

如果status仅为INOUT,则不能执行SELECT * from student WHERE status="IN"

票数 0
EN

Stack Overflow用户

发布于 2019-08-07 09:17:43

下面是考虑自动增量id的查询

代码语言:javascript
复制
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'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57385713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档