Pokud používáte MySQL 8.0, můžete použít 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
Pokud potřebujete filtrovat k danému datu, můžete to udělat ve vnějším dotazu:
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'
Vezměte prosím na vědomí, že date
a rank
jsou názvy funkcí MySQL, a proto nejsou dobrou volbou pro názvy sloupců. Přejmenoval jsem sloupce v dotazu.