如何获取学生详细信息SQL查询

时间:2014-10-05 14:06:12

标签: mysql sql oracle11g

  • 我的桌面学生有ID,SID,CHECKID,DATE
  • 此处ID:tableID(自动增量),SID:studentID,CHECKID:0/1(即IN / OUT),DATE。
  • 当学生进入教室时,他会用卡片保存每日出勤率。
  • 我的数据是

    ID SID CHECKID DATE

    --- --- -------- -----

    0 101 0 04-10-2013 10:00:00

    1 101 1 04-10-2013 11:30:00

    2 101 0 04-10-2013 14:15:00

  • 我尝试过如下查询:

    从学生中选择DISTINCT SID,MAX(DATE),CHECKID,其中SID ='101'组由SID

  • 然后我将结果作为两个记录。

  • 我需要记录的是最长日期(即特定学生的近期记录),如:仅限第3条记录。

  • 提前帮助。谢谢。

1 个答案:

答案 0 :(得分:4)

最快的方法可能是使用分析函数:

select *
  from (select s.*,
               row_number() over(partition by sid order by date desc) as rn
          from student s)
 where rn = 1

另一种方法是相关子查询:

select *
  from student s
 where date = (select max(x.date) from student x where x.sid = s.sid)

另一种方法是加入内联视图:

select s.*
  from student s
  join (select sid, max(date) as sid_last_date from student group by sid) v
    on s.sid = v.sid
   and s.date = v.sid_last_date