sql >> Databasteknik >  >> RDS >> Mysql

mysql - Jämför värden från strängar för datum=n med datum=n-1

Om du kör MySQL 8.0 kan du använda 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

Om du behöver filtrera på ett visst datum kan du göra det i en yttre fråga:

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'

Observera att date och rank är namn på MySQL-funktioner, därför inte ett bra val för kolumnnamn. Jag döpte om kolumnerna i frågan.



  1. Använd MySQL spatial extensions för att välja punkter inuti cirkeln

  2. Windows phone 8.1-appen ansluter till en databas

  3. Hur man fyller i saknade datum i PostgreSQL med generation_series

  4. Hur man delar upp frågefönster i SQL Server Management Studio (SSMS) - SQL Server / TSQL självstudie del 13