Как написать эффективный sql запрос, который возвращает последний балл студента (по дате) в каждом уроке? - PullRequest
1 голос
/ 16 февраля 2020

структура таблицы следующая:

student lesson  score   Date
Allen   Math    12      9/11/12
Allen   Math    19      9/11/14
Allen   Physics 10      9/11/12
Joe     Physics 15      9/11/12
Joe     Physics 13      9/11/15

результат должен быть:

student lesson  score   Date
Allen   Math    19      9/11/14
Allen   Physics 10      9/11/12
Joe     Physics 13      9/11/15

1 Ответ

3 голосов
/ 16 февраля 2020

Я думаю, что наиболее эффективный запрос - это коррелированный подзапрос с правильным индексом:

select t.*
from t
where t.date = (select max(t2.date)
                from t t2
                where t2.student = t.student and t2.lesson = t.lesson
               );

Требуемый индекс находится на (student, lesson, date).

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

...