payk Опубликовано 22 августа, 2011 Жалоба Поделиться Опубликовано 22 августа, 2011 Есть БД оценок(Предмет, семестр, оценка) нужно оставить все записи с максимальным семестром.Не могу придумать как это сделать.Занёс записи в массив,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) в которой повторяется предмет. Нужно отобрать только те записи в которых максимальный семестр. Ссылка на комментарий
superman Опубликовано 23 августа, 2011 Жалоба Поделиться Опубликовано 23 августа, 2011 Может быть базу для этого использовать?Как-то такSELECT * FROM table_name WHERE semestr=(SELECT MAX(semestr) FROM table_name) Ссылка на комментарий
payk Опубликовано 23 августа, 2011 Автор Жалоба Поделиться Опубликовано 23 августа, 2011 так прога отберёт только записи с максимальным семестром, мну нужно немного по другому. Приведу пример:в таблице 5 записей:предмет / семестр / оценкаВыш. мат. / 1 / 4Архитектура / 2 / 3Выш. мат. / 5 / 5Экология / 3 / 4Архитектура / 5 / 4из этого нужно отобрать:Выш. мат. / 5 / 5Экология / 3 / 4Архитектура / 5 / 4т.е. из всех одинаковых предметов тот, что с максимальным семестром.уже неделю над этим думаю, что то в голову ничего нормального не идёт (( Ссылка на комментарий
superman Опубликовано 23 августа, 2011 Жалоба Поделиться Опубликовано 23 августа, 2011 хм, тогда что-то типаSELECT a.* FROM table a INNER JOIN (SELECT discip, MAX(semestr) AS maxSemestr FROM table GROUP BY discip) b ON a.discip = b.discip AND a.semestr = maxSemestr Ссылка на комментарий
payk Опубликовано 25 августа, 2011 Автор Жалоба Поделиться Опубликовано 25 августа, 2011 maxSemestr это что такое ? Ссылка на комментарий
genemy Опубликовано 25 августа, 2011 Жалоба Поделиться Опубликовано 25 августа, 2011 maxSemestr это что такоеэто просто псевдоимя столбца Ссылка на комментарий
payk Опубликовано 25 августа, 2011 Автор Жалоба Поделиться Опубликовано 25 августа, 2011 Семестр в таблице В ?? ) Ссылка на комментарий
genemy Опубликовано 25 августа, 2011 Жалоба Поделиться Опубликовано 25 августа, 2011 MAX(semestr) AS maxSemestrвот это самое большое значение семестраGROUP BY discipпо каждой дисциплине Ссылка на комментарий
payk Опубликовано 27 августа, 2011 Автор Жалоба Поделиться Опубликовано 27 августа, 2011 INNER JOIN можно применять к одной таблице ? Что можно применить вместо него для одной таблицы ? ))select A.Дисциплина, A.Оценка, A.СеместрFROM Все_оценки AINNER JOINSELECT B.Дисциплина, MAX(B.Семестр) AS maxSemestrFROM Все_оценки BGROUP BY A.ДисциплинаON A.Дисциплина=B.Дисциплина AND A.Семестр=maxSemestrПишет что ошибка синтаксиса в операции FROM. Ссылка на комментарий
superman Опубликовано 27 августа, 2011 Жалоба Поделиться Опубликовано 27 августа, 2011 Скобки то забыл и не туда B поставил.SELECT A.Дисциплина, A.Оценка, A.СеместрFROM Все_оценки AINNER JOIN(SELECT B.Дисциплина, MAX(B.Семестр) AS maxSemestrFROM Все_оценкиGROUP BY A.Дисциплина) BON A.Дисциплина=B.Дисциплина AND A.Семестр=maxSemestr Ссылка на комментарий
payk Опубликовано 27 августа, 2011 Автор Жалоба Поделиться Опубликовано 27 августа, 2011 "Не поддерживает выражение объединения" Ссылка на комментарий
superman Опубликовано 27 августа, 2011 Жалоба Поделиться Опубликовано 27 августа, 2011 Проблемы твоей СУБД. В MySQL работает. Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти