【问题标题】:Calculate Absent of Student in SQL Server在 SQL Server 中计算学生缺勤
【发布时间】:2016-12-03 15:32:01
【问题描述】:

我正在更新一个学校申请,我想在其中通过他们的 ID 和所选时间段计算任何学生的缺勤情况。我在 Sql Server 中有一个名为 CHECKINOUT 的表,用于保存学生的数据。现在我想计算任何学生的缺勤情况。当有人进入学校时,会在此表中输入以下字段

 [USERID]
  ,[CHECKTIME]
  ,[CHECKTYPE]

这是CHECKINOUT表中数据的截图

现在说我的 id 为 10,我想计算上个月缺勤的学生,我对查询感到困惑。请在这方面帮助我

【问题讨论】:

  • 能否添加示例数据和预期结果
  • 我已经更新了我的问题@Prdp,我想要学生缺席的次数,比如 count(expression)
  • 除非他们预计每天都在学校,否则您将需要一个表格来指示他们预计在学校的天数。这可以是学校的开课日期表或学生的课程表,以指示何时应记录缺勤。否则,有人在这里提出的任何查询都会将周末和节假日以及他们应该上课的任何日子标记为缺勤。
  • 如果您没有准确告诉我们您要查找的结果,我们无法为您提供帮助,还请说明该列 checktype 的含义
  • @billpennock 假期不是问题,在这里我只想要学生在选定日期不可用的次数

标签: c# sql sql-server database


【解决方案1】:

正在研究它,不确定这是否是最简单的,但它有效,我已经测试过。

select missDates.userid, checkinout.userid, dt from
checkinout right join  
(select * from (
    SELECT  DATEADD(DAY, nbr - 1, @StartDate) dt
      FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS Nbr
                  FROM      sys.columns c
              ) nbrs
     WHERE   nbr - 1 <= DATEDIFF(DAY, @StartDate, @EndDate)) alldates 
     cross join (select distinct userid from checkinout) t2) missDates
         on missdates.userid = checkinout.userid 
         and convert(date,checktime) = convert(date,dt)
 where  checkinout.userid is null

【讨论】:

  • 感谢@Stuart-ainsworth 的天序列代码
  • 从字符串转换日期和/或时间时转换失败。为什么会出现这个错误?
  • 以及在哪里指定缺席正在寻找的已用ID?
  • 在我的测试中,检查时间是一个日期时间字段。你的出于某种原因是一个字符字段吗?如果是这样,您需要在数据或过程中进行转换
  • 至于在哪里获取特定用户尝试添加“和missdates.userid =”你想要的用户
猜你喜欢
  • 1970-01-01
  • 2010-12-06
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多