Я пытаюсь выполнить SQL-запрос выбора, чтобы получить определенные записи и сгруппировать их по определенному значению поля.
У меня есть таблица с именем courses
, которая выглядит следующим образом:
+----+----------+
| id | shortname|
+----+----------+
3, 20115-2019a
4, 10112-2018a
5, 20115-2019b
6, 10112-2020a
7, 43112-2017a
последняя часть поля "короткое имя" представляет семестр. («2019a», «2018a» и т. Д.)
номер («20115», «10112» и т. д.) - название курса.
Мне нужен SQL-запрос, который даст мне запись с последним семестром каждого курса.
В приведенном выше примере я хочу, чтобы результат был:
- 5, 20115-2019b (потому что 2019b - последний семестр 20115)
- 6, 10112-2020a (потому что 2020a - последний семестр 10112)
- 7, 43112-2017a (потому что 2017a - последний семестр 43112)
Это то, что я пробовал до сих пор:
SELECT id, MAX(shortname)
FROM courses
Это не работает, только дай мне первую запись.
Мне удалось отделить название курса от семестра, и я попытался сгруппировать по названию курса:
SELECT id, shortname,
SUBSTRING_INDEX(shortname, "-", 1) AS coursename,
SUBSTRING(shortname, POSITION("-" IN shortname)+1, 7) AS semester
FROM courses
GROUP BY coursename
Но это, кажется, дает мне первый вместо последнего курса