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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2016, 11:37   #1
Sasha58
Новичок
Джуниор
 
Регистрация: 07.12.2016
Сообщений: 2
По умолчанию Запрос на выборку из нескольких таблиц

Добрый день!
Помогите пожалйста написать запрос. Задача следующая:
Есть три таблицы (картнинка ниже).
Необходимо вывести для каждого учителя имя, фамилию и дату старта практики последнего студента.
Т.е. У каждого учителя есть по нескольку студентов, я джоином вывела какому учителю какие студенты соответствуют, но не могу понять как получить именно самого последнего по дате старта и вывести именно его для каждого учителя.
Вот мой запрос, как написать условие WHERE чтоб выбрать именно последнего студента? или предложите, плиз свой вариант решения этой задачи


SELECT teachers_table.l.name AS teachers_name, students_table.f_name AS stud_name, students_table.l_name AS stud_surname
FROM stud_teach_spec_table
INNER JOIN teachers_table ON stud_teach_spec_table.mentor_id= teachers_table.mentor.id
INNER JOIN students_table ON stud_teach_spec_table.intern_id=stu dents_table.intern_id

tables.png
Sasha58 вне форума Ответить с цитированием
Старый 07.12.2016, 12:47   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
select teachers_table.* --преподаватель 
       students_table.* --и его последний студент
from ( select t.mentor_id, --код преподавателя 
            , ( -- и код его последнего студента
                select top 1 intern_id
                from stud_tearch_spec_table
                INNER JOIN students_table ON stud_teach_spec_table.intern_id=stu dents_table.intern_id
                where stud_tearch_spec_table.mentor_id =t.mentor_id
                order by pr_st_date DESC ) as id_last_student       
       from tearcher_table as t 
     ) as lst
INNER JOIN teachers_table ON lst.mentor_id= teachers_table.mentor.id
INNER JOIN students_table ON lst.id_last_student=students_table.intern_id

Код:
-- последняя ДАТА практик по КАЖДОМУ преподавателю
select max(pr_st_Date) as last_date, mentor_id
from stud_tearch_spec_table as t
inner join students_table as s on t.intern_id =s.intern_id
group by mentor_id


select ...........
FROM stud_teach_spec_table
INNER JOIN teachers_table ON stud_teach_spec_table.mentor_id= teachers_table.mentor.id
INNER JOIN students_table ON stud_teach_spec_table.intern_id=stu dents_table.intern_id
-- ну скажем так ЭТО у нас было 
inner join -- добавим список последних ДАТ практики по каждому преподавателю
           (  ... см. выше ) as lst on lst.mentor_id =tearchers_table.mentor_id  
WHERE -- а теперь зная студента, его преподавателя и дату его последней практики
      studens_table.pr_st_date =lst.last_date
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 07.12.2016 в 12:49.
evg_m вне форума Ответить с цитированием
Старый 07.12.2016, 13:08   #3
Sasha58
Новичок
Джуниор
 
Регистрация: 07.12.2016
Сообщений: 2
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
select teachers_table.* --преподаватель 
       students_table.* --и его последний студент
from ( select t.mentor_id, --код преподавателя 
            , ( -- и код его последнего студента
                select top 1 intern_id
                from stud_tearch_spec_table
                INNER JOIN students_table ON stud_teach_spec_table.intern_id=stu dents_table.intern_id
                where stud_tearch_spec_table.mentor_id =t.mentor_id
                order by pr_st_date DESC ) as id_last_student       
       from tearcher_table as t 
     ) as lst
INNER JOIN teachers_table ON lst.mentor_id= teachers_table.mentor.id
INNER JOIN students_table ON lst.id_last_student=students_table.intern_id

Код:
-- последняя ДАТА практик по КАЖДОМУ преподавателю
select max(pr_st_Date) as last_date, mentor_id
from stud_tearch_spec_table as t
inner join students_table as s on t.intern_id =s.intern_id
group by mentor_id


select ...........
FROM stud_teach_spec_table
INNER JOIN teachers_table ON stud_teach_spec_table.mentor_id= teachers_table.mentor.id
INNER JOIN students_table ON stud_teach_spec_table.intern_id=stu dents_table.intern_id
-- ну скажем так ЭТО у нас было 
inner join -- добавим список последних ДАТ практики по каждому преподавателю
           (  ... см. выше ) as lst on lst.mentor_id =tearchers_table.mentor_id  
WHERE -- а теперь зная студента, его преподавателя и дату его последней практики
      studens_table.pr_st_date =lst.last_date
Спасибо большое!
буду пробовать
Sasha58 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на выборку из нескольких таблиц Raizel БД в Delphi 7 28.08.2016 22:41
Запрос из нескольких таблиц ksu04061992 SQL, базы данных 2 03.04.2015 22:52
Запрос на выборку из нескольких таблиц bullvinkle Microsoft Office Access 9 11.04.2012 04:35
Не могу составить запрос на выборку из нескольких таблиц :( Semidarckness SQL, базы данных 3 23.05.2010 15:27
sql запрос на выборку записей из двух связанных таблиц Люсьен БД в Delphi 9 20.04.2009 16:07