Ако използвате MySQL 8.0, можете да използвате 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
Ако трябва да филтрирате на дадена дата, можете да го направите във външна заявка:
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'
Моля, имайте предвид, че date
и rank
са имена на MySQL функции, следователно не е добър избор за имена на колони. Преименувах колоните в заявката.