Jika Anda menjalankan MySQL 8.0, Anda dapat menggunakan 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
Jika Anda perlu memfilter pada tanggal tertentu, Anda dapat melakukannya di kueri luar:
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'
Harap diperhatikan bahwa date
dan rank
adalah nama fungsi MySQL, karenanya bukan pilihan yang baik untuk nama kolom. Saya mengganti nama kolom dalam kueri.