Перейти к содержанию

Сортировка и удаление лишних записей


Рекомендуемые сообщения

Есть БД оценок(Предмет, семестр, оценка) нужно оставить все записи с максимальным семестром.

Не могу придумать как это сделать.

Занёс записи в массив,

for i:=1 to DBGrid1.DataSource.DataSet.RecordCount do

begin

discip:=DbGrd1.Fields[0].Asstring;

semestr:=DbGrd1.Fields[1].Asstring;

ocenka:=DBGrd1.Fields[2].AsString;

masdis:=discip;

massem:=semestr;

masoce:=ocenka;

DBGrd1.DataSource.DataSet.Next;

end;

отсортировал в порядке убывания

for j:=1 to 80 do

for i:=1 to 79 do

begin

if MasSem

begin

x:=masdis;

masdis:=masdis[i+1];

masdis[i+1]:=x;

x:=massem;

massem:=massem[i+1];

massem[i+1]:=x;

x:=masoce;

masoce:=masoce[i+1];;

masoce[i+1]:=x;

end;

end;

,

дальше хотел сделать так что бы прога не записывала запись(в другой массив или сразу в DBGrid) в которой повторяется предмет. Нужно отобрать только те записи в которых максимальный семестр.

Ссылка на комментарий

так прога отберёт только записи с максимальным семестром, мну нужно немного по другому. Приведу пример:

в таблице 5 записей:

предмет / семестр / оценка

Выш. мат. / 1 / 4

Архитектура / 2 / 3

Выш. мат. / 5 / 5

Экология / 3 / 4

Архитектура / 5 / 4

из этого нужно отобрать:

Выш. мат. / 5 / 5

Экология / 3 / 4

Архитектура / 5 / 4

т.е. из всех одинаковых предметов тот, что с максимальным семестром.

уже неделю над этим думаю, что то в голову ничего нормального не идёт (( :dontknow:

Ссылка на комментарий

INNER JOIN можно применять к одной таблице ? Что можно применить вместо него для одной таблицы ? ))

select A.Дисциплина, A.Оценка, A.Семестр

FROM Все_оценки A

INNER JOIN

SELECT B.Дисциплина, MAX(B.Семестр) AS maxSemestr

FROM Все_оценки B

GROUP BY A.Дисциплина

ON A.Дисциплина=B.Дисциплина AND A.Семестр=maxSemestr

Пишет что ошибка синтаксиса в операции FROM.

Ссылка на комментарий

Скобки то забыл и не туда B поставил.

SELECT A.Дисциплина, A.Оценка, A.Семестр
FROM Все_оценки A
INNER JOIN
(SELECT B.Дисциплина, MAX(B.Семестр) AS maxSemestr
FROM Все_оценки
GROUP BY A.Дисциплина) B
ON A.Дисциплина=B.Дисциплина AND A.Семестр=maxSemestr

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...