Неординарный запрос на Jet-SQL

vladK
Дата: 04.06.2004 17:14:10
Есть таблица посещений студентами (Student) занятий (Class) (задача реальная, в студенческие времена таким не занимался, а видать надо было:):

Attendance

ID
StudentClassID
dtDate
isAttended
isAbsent
isSick
.........

Необходимо определять пропустил ли данный StudentClassID первые три дня обучения (isAbsent=True).

Пробую так:
Идея в том чтобы найти сумму хронологически первых трех флагов isAbsent, потом можно проверить, если она = -3 то это то, что надо)

Select StudentClassID,
(Select Sum(isAbsent )
From (Select Top 3 isAbsent
From Attendance A
Where A.StudentClassID = SC.StudentClassID
Order by dtDate ))
From qryStudentClass SC

Но это не рабочий вариант т.к. самый внутренний запрос "не видит" самый внешний SC.StudentClassID

Буду благодарен за Ваши идеи.
io
Дата: 04.06.2004 17:33:08
Я пьян и за не правельные идеи проше не критиковать, мне сегодня 24.

Смотрю и вижу, что ты пытаешься использовать кориллирующий запрос так скажем 2-го уровня вложенности.
такая конструкция работает к примеру:
select id,name,(select chtoNibud from bb as b where b.id=a.id) from aa as a
Причем кориллирующий запрос обязательно долже возвращыть 1-ну строу (т.е. top 3 не подойдет)----> top 3 используй в самом внешнем запросе

Вопрос в другом, Ты говоришь что не видет самый внутренний запрос(скажем что это коррелирующий запрос 2-го уровня) сымый внешний запрос (самому такого писать не приходилось - т.е. коррелирующие запросы писал, но чтоб 2-го уровня, НЕТ).

попробуй связать внешний запрос с коррелирующим запросом 1-го уровня, а коррелирующий запрос 1-го уровня с коррелирующим запросом 2-го уровня.

И опять повтрорюсь я пьян и уже совсем плохо сооображаю.
(c)VIG
Дата: 04.06.2004 17:36:15
select a.StudentClassID
from Attendance a
inner join Attendance a1
on  a.StudentClassID=a1.StudentClassID and a.dtDate>=a1.dtDate
group by a.StudentClassID,a.dt
 having  count(a1.StudentClassID) =3 and sum(isAttended)=-3
vladK
Дата: 04.06.2004 18:12:47
Спасибо, буду разбираться