Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Группировка  [new]
Gagarin_74
Member

Откуда:
Сообщений: 124
Друзья!

Помогите составить запрос к следующей таблице:
Дата_экзаменаНазвание_курсаФИО_студентаДолжность Оценка
20.02.2012Механика Иванов Иван МихайловичСтудент 3 курса 3
4.01.2011 Химия Ололоева Вера ПетровнаГордость ВУЗа5
28.02.2012Физика Иванов Иван МихайловичСтудент 3 курса4
4.11.2012Механика Иванов Иван МихайловичСтудент 4 курса5


Необходимо что бы результатом запроса была таблица в которой для каждого студента присутствовали только строки отражающие последний (по дате) экзамен по каждому курсу.
Результат должен появиться таким:
Дата_экзаменаНазвание_курсаФИО_студентаДолжность Оценка
4.01.2011 Химия Ололоева Вера ПетровнаГордость ВУЗа5
28.02.2012Физика Иванов Иван МихайловичСтудент 3 курса4
4.11.2012Механика Иванов Иван МихайловичСтудент 4 курса5


Запрос типа:
Select Max (Дата_экзамена), Название_курса, ФИО_студента, Должность, Оценка
from Обучение
group by Название_курса, ФИО_студента, Должность, Оценка

Не прокатывает. :(
6 фев 13, 15:21    [13885180]     Ответить | Цитировать Сообщить модератору
 Re: Группировка  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Gagarin_74,

См. 8947782
6 фев 13, 15:37    [13885357]     Ответить | Цитировать Сообщить модератору
 Re: Группировка  [new]
petre
Member

Откуда: Кривой Рог
Сообщений: 42
Так подойдет?

Select t1.Дата_экзамена, t1.Название_курса, t1.ФИО_студента, t1.Должность, t1.Оценка
from Обучение t1
inner join
(Select Max (Дата_экзамена) as Дата_экзамена, Название_курса, ФИО_студента
from Обучение
group by Название_курса, ФИО_студента) t2
on t2.Дата_экзамена=t1.Дата_экзамена and t2.Название_курса=t1.Название_курса and t2.ФИО_студента=t1.ФИО_студента
6 фев 13, 15:41    [13885397]     Ответить | Цитировать Сообщить модератору
 Re: Группировка  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1062
Еще вариант :)

declare @t table(
	Дата_экзамена datetime
	,Название_курса  varchar(100)	
	,ФИО_студента	varchar(100)
	,Должность varchar(100)	
	,Оценка int)
	
insert into @t(
	Дата_экзамена 
	,Название_курса 
	,ФИО_студента
	,Должность
	,Оценка)
select
	'20120202','Механика','Иванов Иван Михайлович','Студент 3 курса',3
union all select	
	'20110104','Химия','Ололоева Вера Петровна','Гордость ВУЗа',5
union all select	
	'20120228','Физика','Иванов Иван Михайлович','Студент 3 курса',	4
union all select	
	'20121104','Механика','Иванов Иван Михайлович','Студент 4 курса',5

select top 1 with ties
		t.Дата_экзамена 
		,t.Название_курса 
		,t.ФИО_студента
		,t.Должность
		,t.Оценка
from (
	select
		Дата_экзамена 
		,Название_курса 
		,ФИО_студента
		,Должность
		,Оценка
		,row_number() over (partition by ФИО_студента,Название_курса order by  Дата_экзамена desc)  N
	from @t t) t
order by
	t.N


Сегодня делаю все что угодно, только бы не работать :)
6 фев 13, 16:09    [13885669]     Ответить | Цитировать Сообщить модератору
 Re: Группировка  [new]
Gagarin_74
Member

Откуда:
Сообщений: 124
Спасибо!
Сейчас начну "переваривать" и переносить на проект.
6 фев 13, 16:24    [13885760]     Ответить | Цитировать Сообщить модератору
 Re: Группировка  [new]
Добрый Э - Эх
Guest
VladimirKr,

прошел бы по ссылке от Гостя333. Там всё это уже давно есть, так что можешь расслабиться и дальше ничего не делать. ;)
6 фев 13, 16:24    [13885763]     Ответить | Цитировать Сообщить модератору
 Re: Группировка  [new]
Добрый Э - Эх
Guest
Gagarin_74,

ну и ты по ссылке сходи, поизучай чего там и как. методов-то описано - вагон и маленькая тележка. Все основные способы перечислены. Осталось выбрать наиболее подходящий.
6 фев 13, 16:26    [13885773]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить