Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql - Compare les valeurs des chaînes pour date=n avec date=n-1

Si vous utilisez MySQL 8.0, vous pouvez utiliser 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

Si vous avez besoin de filtrer sur une date donnée, vous pouvez le faire dans une requête externe :

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'

Veuillez noter que date et rank sont des noms de fonctions MySQL, donc pas un bon choix pour les noms de colonnes. J'ai renommé les colonnes de la requête.