Nếu bạn đang chạy MySQL 8.0, bạn có thể sử dụng 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
Nếu bạn cần lọc vào một ngày nhất định, bạn có thể thực hiện việc đó trong một truy vấn bên ngoài:
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'
Xin lưu ý rằng date
và rank
là tên của các hàm MySQL, do đó không phải là lựa chọn tốt cho tên cột. Tôi đã đổi tên các cột trong truy vấn.