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';