Jeśli używasz MySQL 8.0, możesz użyć lag()
:
select
dte,
country,
sport,
rnk,
lag(rnk) over(partition by country, sport order by dte) rnk_1,
lag(rnk) over(partition by country, sport order by dte) - rnk rank_diff
from mytable
Jeśli potrzebujesz filtrować według określonej daty, możesz to zrobić w zewnętrznym zapytaniu:
select *
from (
select
dte,
country,
sport,
rnk,
lag(rnk) over(partition by country, sport order by dte) rnk_1,
lag(rnk) over(partition by country, sport order by dte) - rnk rank_diff
from mytable
) t
where dte = '2000-01-31'
Pamiętaj, że date
i rank
są nazwami funkcji MySQL, dlatego nie są dobrym wyborem dla nazw kolumn. Zmieniłem nazwy kolumn w zapytaniu.