Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2011, 17:44   #1
gromila_psix
Новичок
Джуниор
 
Регистрация: 24.10.2010
Сообщений: 1
Восклицание Запрос на выявление должников по дате сдачи экзамена.

Здравствуйте. Имеется БД на 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
Этот запрос возвращает минимальную дату в диапазоне Группа-Предмет (т.е. необходимо учитывать что студенты определенной группы, сдавали определенный предмет в определенную (минимальную) дату.)



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

Заранее Благодарю.
gromila_psix вне форума Ответить с цитированием
Старый 21.04.2011, 09:38   #2
BeJIuKuu_Hexo4yxa
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 96
По умолчанию

Далее необходимо сравнить дату сдачи экзамена студентов с минимальной датой сдачи по группе (то, что у тебя уже найдено)

Код:
select progress.*
from progress p,
( -- твой запрос по минимальной дате
SELECT MIN(Pr_DATE) min_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
) t
where p.Pr_DATE > t.min_date
  and p.Grup_ID = t.Grup_ID
  and p.Subj_ID = t.Subj_ID
но данный подход не учитывает если кто-то сдал досрочно. Тогда вся оставшаяся группа будет в должниках
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (Стив Макконнелл)
BeJIuKuu_Hexo4yxa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос по дате Explosion БД в Delphi 3 02.06.2010 18:22
Запрос по дате DaMadQuest SQL, базы данных 0 06.04.2010 17:37
Запрос по дате program123 БД в Delphi 4 17.03.2010 19:53
Нужен помощник для сдачи экзамена gx5rmsu8x Помощь студентам 0 30.01.2010 18:05
Запрос по дате ННС Помощь студентам 4 20.04.2009 19:30