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

mysql - Sammenlign værdier fra strenge for dato=n med dato=n-1

Hvis du kører MySQL 8.0, kan du bruge 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

Hvis du har brug for at filtrere på en given dato, kan du gøre det i en ydre forespørgsel:

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'

Bemærk venligst, at date og rank er navne på MySQL-funktioner, og derfor ikke et godt valg til kolonnenavne. Jeg omdøbte kolonnerne i forespørgslen.



  1. PHP/HTML-formular opdaterer ikke MySQL

  2. Oracle ODP.NET version agnostisk alternativ

  3. Fejl under udførelse af Mariadb-opdateringserklæring

  4. MYSQL lagret procedure, sag