Mysql
 sql >> Database >  >> RDS >> Mysql

mysql - Confronta i valori delle stringhe per date=n con date=n-1

Se stai usando MySQL 8.0, puoi usare 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

Se devi filtrare in una data data, puoi farlo in una query esterna:

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'

Tieni presente che date e rank sono nomi di funzioni MySQL, quindi non una buona scelta per i nomi di colonna. Ho rinominato le colonne nella query.