यदि आप 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 फ़ंक्शंस के नाम हैं, इसलिए कॉलम नामों के लिए एक अच्छा विकल्प नहीं है। मैंने क्वेरी में कॉलम का नाम बदल दिया।