mysql-比较date=n和date=n-1字符串中的值

mysql-比较date=n和date=n-1字符串中的值,mysql,compare,Mysql,Compare,我有这样一个数据集: id | country | date | rank | sport -------------------------------------------- 1 | US | 2000-01-30 | 1 | tennis 2 | BE | 2000-01-30 | 2 | tennis 3 | UK | 2000-01-30 | 3 | tennis 4 | UK | 2000

我有这样一个数据集:

id | country | date       | rank   | sport
--------------------------------------------
1  | US      | 2000-01-30 | 1      | tennis
2  | BE      | 2000-01-30 | 2      | tennis
3  | UK      | 2000-01-30 | 3      | tennis
4  | UK      | 2000-01-30 | 1      | golf
5  | US      | 2000-01-30 | 2      | golf
6  | FR      | 2000-01-30 | 3      | golf
7  | UK      | 2000-01-31 | 1      | tennis
8  | US      | 2000-01-31 | 2      | tennis
9  | FR      | 2000-01-31 | 3      | tennis
10 | UK      | 2000-01-31 | 1      | golf
11 | US      | 2000-01-31 | 2      | golf
12 | FR      | 2000-01-31 | 3      | golf
我希望得到如下结果:

date          country   sport     rank    rank-1   rankDiff
2000-01-31    UK        TENNIS    1       3        2
2000-01-31    US        TENNIS    2       1        -1
....
我该怎么安排呢? 选择当前日期不是couse的问题,但将当前日期与以前的日期进行比较并不容易

SELECT * FROM table WHERE date = '2000-01-31'

希望你能帮助我

如果您正在运行MySQL 8.0,可以使用
lag()

如果需要在给定日期进行筛选,可以在外部查询中进行:

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函数的名称,因此列名不是一个好的选择。我重命名了查询中的列

SELECT x.date
     , x.country
     , x.sport
     , x.rank
     , y.rank prev
     , y.rank-x.rank delta 
  FROM my_table x 
  LEFT 
  JOIN my_table y 
    ON y.country = x.country 
   AND y.sport = x.sport 
   AND y.date = '2000-01-30' 
 WHERE x.date = '2000-01-31';
SELECT x.date
     , x.country
     , x.sport
     , x.rank
     , y.rank prev
     , y.rank-x.rank delta 
  FROM my_table x 
  LEFT 
  JOIN my_table y 
    ON y.country = x.country 
   AND y.sport = x.sport 
   AND y.date = '2000-01-30' 
 WHERE x.date = '2000-01-31';