2016-12-03 48 views
-4

我正在更新一个学校申请,在该申请中我想通过他们的ID和选定的时间段来计算任何学生的缺席。我有一个名为CHECKINOUT的Sql Server中的表,用于保存学生的数据。现在我想计算不具有任何student.when在学校有人进入,入口在此表以下字段计算SQL Server中学生的缺席

[USERID] 
    ,[CHECKTIME] 
    ,[CHECKTYPE] 

enter image description here 这是CHECKINOUT表数据的截图

现在说我做的有id 10,我想在上个月计算缺席的学生,我在查询中感到困惑。请帮我在这

+0

你可以添加样本数据和预期的结果 –

+0

我已经更新了我的问题@Prdp,我要的次数,除非他们预计每天在校学生是不存在像数(表达) –

+3

你”我们需要一张表格来表明他们在学校期待的日子。这可以是会议日期的学校表或学生的课程表,可以指出何时应该记录缺席。否则,任何有人在这里提出的查询都会将周末和假日标记为缺席,以及他们应该在课堂上的任何日子。 – billpennock

回答

0

正在工作,不知道这是最简单的,但它的工作原理,我测试了它。

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 
+0

感谢@ Stuart-ainsworth查看天数代码 – billpennock

+0

从字符串中转换日期和/或时间时转换失败。为什么这个错误? –

+0

以及在哪里指定使用的ID缺席正在寻找? –