2016-12-03 5 views
-4

Я обновляю школьное приложение, в котором я хочу рассчитать отсутствие какого-либо ученика по их идентификатору и выбранному периоду времени. У меня есть таблица на Sql Server с именем CHECKINOUT, которая сохраняет данные студентов. Теперь я хочу, чтобы вычислить отсутствует какой-либо student.when кто-то входит в школу, сделана запись в таблице со следующими полямиРассчитать отсутствие студента в SQL Server

[USERID] 
    ,[CHECKTIME] 
    ,[CHECKTYPE] 

enter image description here это скриншот данных в таблице CheckInOut

Теперь говорят, что я имеют id 10, и я хочу рассчитать отсутствие ученика в течение последнего месяца, я запутался в запросе. пожалуйста, помогите мне в этом

+0

Вы можете добавить данные образца и ожидаемый результат –

+0

я обновил мой вопрос @Prdp, я хочу несколько раз, что студент отсутствует как COUNT (выражение) –

+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

и где указать используемый идентификатор, отсутствующий ищет? –

Смежные вопросы