Как написать SQL-запрос, чтобы выбрать игрока с битой с наибольшим количеством очков, чем в предыдущем году - PullRequest
0 голосов
/ 02 июля 2019

Учитывая эту таблицу:

Name     Score   Year
----------------------
Richie    50     2017
Richie    40     2016
Richie    30     2015
Mark      20     2017
Mark      30     2016
Smith     60     2015
Smith     50     2014

Выберите игрока с битой, оценка которого выше предыдущего.

Например, здесь вывод должен быть

Richie  50   2017
Richie  40   2016
Smith   60   2015

Я не знаю, как получить этот ответ - моя попытка пока:

select Name, score
from table
order by score ...

Вывод должен быть

Richie  50   2017
Richie  40   2016
Smith   60   2015

Ответы [ 2 ]

3 голосов
/ 02 июля 2019

Использование lag():

select t.*
from (select t.*, lag(score) over (partition by name order by year) as prev_score
      from t
     ) t
where score > prev_score;
1 голос
/ 02 июля 2019

Вы можете сделать это с самостоятельным соединением:

select t.*
from tablename t inner join tablename tt
on tt.name = t.name and tt.year = t.year - 1
where t.score > tt.score

или с существующим:

select t.*
from tablename t 
where exists(
  select 1 from tablename
  where name = t.name and year = t.year - 1 and score < t.score
)

См. демо .Результаты:

> name   | score | year
> :----- | ----: | ---:
> Richie |    50 | 2017
> Richie |    40 | 2016
> Smith  |    60 | 2015
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...