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

Откуда:
Сообщений: 2
Здравствуйте, нужна помощь.
Имеется таблица t
fio – ФИО студента,
data_oz – дата получения оценки,
oz_q – эквивалент оценки (0,1,2,3,4,5),
id_dis – идентификатор дисциплины,

Нужно вывести всех задолжников, проблема в том что закрытые двойки задолженностями не считаются, считать только те, которые не пересдали.

делаю такой запрос:
select fio
from(
select id_dis, fio, max(data_oz)
from t
where oz_q=2
group by id_dis, fio)
все равно выводятся те которые пересдавали двойки
4 дек 14, 18:20    [16951676]     Ответить | Цитировать Сообщить модератору
 Re: Вывод последней оценки  [new]
xenix
Guest
может, соорудить что-то навроде:
with cte as
(
  select fio,data_oz,id_dis,oz_q,
row_number()over(partition by fio,id_dis)order by data_oz desc Xcol
from t
)
select c.* from cte as c where c.xcol=1
4 дек 14, 18:50    [16951866]     Ответить | Цитировать Сообщить модератору
 Re: Вывод последней оценки  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Иван7, смысл вашего запроса: для всех студентов, которые получали двойку, нужно найти дату последней двойки.
Нужно переделать на такой: для всех студентов, которые получали двойку, нужно найти дату последней оценки и убедиться, что это была двойка.

Можно сделать подзапросом - сначала выбираете

select id_dis, fio, max(data_oz)
from t
where oz_q=2
group by id_dis, fio


Потом обьединяете с основной таблицей, и выбираете только те записи, для которых в основной таблице этому набору полей соответствует двойка.
4 дек 14, 18:51    [16951868]     Ответить | Цитировать Сообщить модератору
 Re: Вывод последней оценки  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Забыл поправить подзапрос, в подзапросе нужно убрать условие, чтобы выбрались все оценки.

select id_dis, fio, max(data_oz)
from t
group by id_dis, fio
4 дек 14, 18:53    [16951883]     Ответить | Цитировать Сообщить модератору
 Re: Вывод последней оценки  [new]
Иван7
Member

Откуда:
Сообщений: 2
Minamoto,
спасибо, я правильно понял, нужно сделать так?
select data.fio
from t,
(select id_dis, fio, max(data_oz)
from t
group by id_dis, fio) data
where t.fio=data.fio
and oz_q=2
4 дек 14, 22:44    [16952723]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить