sql >> Databasteknik >  >> RDS >> Mysql

MySQL-skillnad mellan två rader i en SELECT-sats

SELECT
    mt1.ID,
    mt1.Kilometers,
    mt1.date,
    mt1.Kilometers - IFNULL(mt2.Kilometers, 0) AS number_km_since_last_date   
FROM
    myTable mt1
    LEFT JOIN myTable mt2
        ON mt2.Date = (
            SELECT MAX(Date)
            FROM myTable mt3
            WHERE mt3.Date < mt1.Date
        )
ORDER BY mt1.date

Sql Fiddle

Eller genom att emulera en lag() fungera genom MySql hackiness...

SET @kilo=0;

SELECT
    mt1.ID,
    mt1.Kilometers - @kilo AS number_km_since_last_date,
    @kilo := mt1.Kilometers Kilometers,
    mt1.date
FROM myTable mt1
ORDER BY mt1.date

Sql Fiddle



  1. mysql fulltextsökning misslyckades

  2. Varning:mysqli_connect():(HY000/1045):Åtkomst nekad för användaren 'användarnamn'@'localhost' (med lösenord:YES)

  3. Hur man identifierar MySQL-prestandaproblem med långsamma frågor

  4. PostgreSQL returnerar resultatet satt som JSON-array?