SELECT MIN(Pr_DATE), Progress.Grup_ID, Progress.Subj_ID
FROM Progress, Students
WHERE Students.Stud_ID IN
(select Students.Stud_ID
from Progress P, Study, Students
where P.Grup_ID = Study.Grup_ID and Study.Subj_ID = P.Subj_ID
and Students.Group_ID = Study.Grup_ID)
GROUP BY Progress.Grup_ID, Progress.Subj_ID
Запрос на выявление должников по дате сдачи экзамена.
В таблице Progress, Pr_DATE - дата сдачи зачета/экзамена студентом. Есть студенты должники - которые сдали позже, чем все студенты их группы. Нужно выяснить, кто из студентов - задолжник, а кто - нет. Необходим учитывать группу (Grup) и предмет (Subject).
Т.е. есть студент из группы id которой = 4, и есть предемет с id = 12, который сдавала эта группа. Большинство студентов из группы сдали зачет 2010-11-15, но есть студенты которые сдали позже.
По идеи нужно найти минимальную дату в диапазоне - Группа-Предмет и сравнить эту минимальную дату со всеми датами в этом диапазоне. Уверен, что это делается через CASE.
НЕ могу додумать как оформить через CASE или как-то иначе.
Есть запрос:
Код:
Этот запрос возвращает минимальную дату в диапазоне Группа-Предмет (т.е. необходимо учитывать что студенты определенной группы, сдавали определенный предмет в определенную (минимальную) дату.)
Подскажите, наставьте на путь истинный.
З.Ы. нельзя использовать представления, хранимые процедуры, писать функцию, нужно сделать запросом.
Заранее Благодарю.
Обычный подзапрос и все.
Код:
select
*
from
Progress p
join (select Grup_ID, Subj_ID, Pr_Date = min(Pr_Date) from Progress group by Grup_ID, Subj_ID) m
on p.Grup_ID = m.Grup_ID and p.Subj_ID = m.Subj_ID
where
p.Pr_Date > m.Pr_Date
*
from
Progress p
join (select Grup_ID, Subj_ID, Pr_Date = min(Pr_Date) from Progress group by Grup_ID, Subj_ID) m
on p.Grup_ID = m.Grup_ID and p.Subj_ID = m.Subj_ID
where
p.Pr_Date > m.Pr_Date
Кстати, у вас студентов ботанов там нет? =) А то один ботан, который сдаст досрочно, по вашей логике - сделает всю группу должниками. Имхо, официальные даты экзаменов все-таки должны где-то храниться, а не вычисляться на лету.
БД так сказать "тренировочная", поэтому ботанов нет. А с датами - приходится работать на той модели, которую дали.
А, ну тогда понятно. Успехов!