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関数の名前であるため、列名には適していません。クエリの列の名前を変更しました。