Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запрос на выявление должников по дате сдачи экзамена.

65K
18 апреля 2011 года
iec
5 / / 27.02.2011
Здравствуйте. Имеется БД на SQL Server 2008.



В таблице Progress, Pr_DATE - дата сдачи зачета/экзамена студентом. Есть студенты должники - которые сдали позже, чем все студенты их группы. Нужно выяснить, кто из студентов - задолжник, а кто - нет. Необходим учитывать группу (Grup) и предмет (Subject).

Т.е. есть студент из группы id которой = 4, и есть предемет с id = 12, который сдавала эта группа. Большинство студентов из группы сдали зачет 2010-11-15, но есть студенты которые сдали позже.



По идеи нужно найти минимальную дату в диапазоне - Группа-Предмет и сравнить эту минимальную дату со всеми датами в этом диапазоне. Уверен, что это делается через CASE.

НЕ могу додумать как оформить через CASE или как-то иначе.

Есть запрос:
 
Код:
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


Этот запрос возвращает минимальную дату в диапазоне Группа-Предмет (т.е. необходимо учитывать что студенты определенной группы, сдавали определенный предмет в определенную (минимальную) дату.)



Подскажите, наставьте на путь истинный.
З.Ы. нельзя использовать представления, хранимые процедуры, писать функцию, нужно сделать запросом.

Заранее Благодарю.
385
18 апреля 2011 года
SomewherSomehow
477 / / 25.07.2004
Че-то вы перемудрили.
Обычный подзапрос и все.
 
Код:
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

Кстати, у вас студентов ботанов там нет? =) А то один ботан, который сдаст досрочно, по вашей логике - сделает всю группу должниками. Имхо, официальные даты экзаменов все-таки должны где-то храниться, а не вычисляться на лету.
65K
18 апреля 2011 года
iec
5 / / 27.02.2011
[SIZE="5"]Премного благодарен[/SIZE], еще учу SQL,и часто мудрю).
БД так сказать "тренировочная", поэтому ботанов нет. А с датами - приходится работать на той модели, которую дали.
385
18 апреля 2011 года
SomewherSomehow
477 / / 25.07.2004
А, ну тогда понятно. Успехов!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог