我正在更新学校申请表,其中我想根据他们的身份证和选定的时间段来计算任何学生的缺席。我在Sql Server中有一个名为CHECKINOUT的表,用于保存学生的数据。现在我想计算没有学生。当有人进入学校时,在这个表格中输入以下字段
[USERID]
,[CHECKTIME]
,[CHECKTYPE]
现在说我有身份证10,我想在上个月计算缺席的学生,我对查询感到困惑。请帮帮我
答案 0 :(得分: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