目前表有 
1.学生刷卡信息表
  学号 
  刷卡日期
  刷卡时间
2.上课时间表
   早上上课
   早上下课时间
   下午上课时间
   下午下课时间3.学生表
想让学生上课和下课后都刷卡
现在怎么判断学生是迟到,早退,矿课
假如上课时间是 8:00-12:00  14:00-17:00
8:00之前到的是正常
8:00-12:00  是迟到 也有可能是早退  (这两个要如何判断)
12:00之前没有记录的是矿课12:00-14:00之间有可能是早上放学,也有可能是下午正常上课,这个又要如何判断

解决方案 »

  1.   

    上课时间还是需要建表的。毕竟现在学校的作息时间也会变动的。学生信息表: 卡号(其他的学生信息)
    刷卡信息表: 卡号,刷卡时间
    上课时间表:  作为基础表维护(上午上课时间,下午上课时间......)基本上就可以了。剩下的就是SQL语句的问题了。
    其实SQL虽然比较复杂,但还是能够实现的。   
      

  2.   

    迟到
      1. 當天有課且有刷卡記錄﹔
      2-1. 上午有課,且第一次刷卡的時間在第一節上課時間之后﹔
      2-2. 下午有課,且在設定時間段內無刷卡記錄的(如樓上說的卡在13:00-下午上課之前為下午上課時的刷卡時段)﹔早退
      1. 當天有課且有刷卡記錄﹔
      2-1. 上午有課,且在設定時間段內無刷卡記錄的(如下午下課之后 - 13:00)﹔
      2-2. 下午有課,且最后一次刷卡時間在最後一節下課之前﹔礦课
      A. 當天有課,無刷卡記錄,礦全部課﹔
      或
      B. 遲到/早退的礦課:
        B-1.上午遲到,第一次刷卡的時間在第N次課下課時間之后,例如上午4節課,則會有4個下課時間,Count Where Min(刷卡時間)>=上午的下課時間
        B-2.下午遲到,13:00之后最早一次的刷卡時間在第N次課下課時間之后,Count Where Min(刷卡時間)>=下午的下課時間 And 刷卡時間>=13:00
        C-1.上午早退,13:00之前最後一次的刷卡時間在第N次課上課時間之前,Count Where Max(刷卡時間)<=上午的上課時間 And 刷卡時間<13:00
        C-2.下午早退,最后一次刷卡的時間在第N次課上課時間之前,Count Where Max(刷卡時間)<=下午的上課時間根據樓主提供的條件,看似有些情況下的結果會顯得比較古怪,比如說7:30刷一次,17:30刷第二次,則會算是上午早退+下午遲到+全天曠課