Задача: * Я пытаюсь подсчитать количество последовательных пропусков занятий каждого ученика в определенном классе.Однако необходимо возобновить подсчет, если этот ученик посещал занятия в течение одного дня.
например, если в классе MATH1234 есть занятия в понедельник и пятницу, а ученик 001234 пропустилПонедельник, пятница для Недели 1 и понедельник для Недели 2, но посещенные Пятница для Недели 2, затем пропущенные понедельник и пятница для Недели 3, их число последовательных пропусков для этого класса будет:
(это сокращенная версиямоей таблицы уроков)
Class Day Week IsAbsent ConsecutiveAbs
MATH1234 Mon 1 1 1
MATH1234 Fri 1 1 2
MATH1234 Mon 2 1 3
MATH1234 Fri 2 0 0
MATH1234 Mon 3 1 1
MATH1234 Fri 3 1 2
У меня есть таблица под названием Уроки , в которой содержится текущий список всех учащихся и классов, в которые они записаны, а такжеони отсутствовали в любых классах:
Уроки ([ID ученика], [Номер класса], [Номер строки], [Академический период], [Год], [Срок], [Неделя], [Период дня], [ClassDate], [IsAbsent], [ReasonCode], [ConsecutiveAbs])
Учитывая приведенную выше таблицу, в настоящее время я занимаюсь обновлением таблицы «Уроки» и изменяю значение ConsecutiveAbsкак это:
UPDATE Lessons
SET ConsecutiveAbs =
(SELECT ISNULL(SUM(CAST(IsAbsent AS numeric)), 0)
FROM Lessons AS L3
WHERE L3.IsAbsent = 1
AND L1.IsAbsent <> 0
AND L3.[Student ID] = L1.[Student ID]
AND L3.[Class Number] = L1.[Class Number]
AND L3.[Line Number] = L1.[Line Number]
AND L3.[Year] = L1.[Year]
AND L3.[ClassDate] <= L1.[ClassDate]
AND (L3.[ClassDate] > (SELECT MAX(L2.ClassDate)
FROM Lessons AS L2
WHERE L2.IsAbsent = 0
AND L2.[Student ID] = L1.[Student ID]
AND L2.[Class Number] = L1.[Class Number]
AND L2.[Line Number] = L1.[Line Number]
AND L2.[Year] = L1.[Year]
AND L2.ClassDate < L1.[ClassDate]
) OR (SELECT MAX(L2.ClassDate)
FROM Lessons AS L2
WHERE L2.IsAbsent = 0
AND L2.[Student ID] = L1.[Student ID]
AND L2.[Class Number] = L1.[Class Number]
AND L2.[Line Number] = L1.[Line Number]
AND L2.[Year] = L1.[Year]
AND L2.ClassDate < L1.[ClassDate]
) IS NULL))
FROM Lessons AS L1
Но тне обращая внимания на классы, где ученик действительно посещал занятия и просто продолжал считать: (
Class Day Week IsAbsent ConsecutiveAbs
MATH1234 Mon 1 1 1
MATH1234 Fri 1 1 2
MATH1234 Mon 2 1 3
MATH1234 Fri 2 0 4
MATH1234 Mon 3 1 5
MATH1234 Fri 3 1 6
Есть идеи?