sql >> Databasteknik >  >> RDS >> Mysql

Subtrahera två raders värden inom samma kolumn med Mysql-grupp efter ID

Dina datum är felaktiga. När du beställer efter denna kolumn beställer du efter dag först. Korrekt beställning är år-månad-dag. Använd rätt datatyp, datumtid eller tidsstämpel. För att göra detta kan du göra följande:

alter table table1 add column d datetime;
update table1 set d = str_to_date(`Date`, '%d-%m-%Y %H:%i');
alter table table1 drop column `Date`;

Frågan för att få ditt önskade resultat är då:

SELECT ID, d, Value,
       IF(@ID=ID, Value - @prevV, 'N/A') AS diff,
       @row_number:=CASE WHEN @ID=ID THEN @row_number+1 ELSE 1 END AS row_number,

       @prevV := Value,
       @ID:=ID AS ID
FROM table1
, (SELECT @row_number:=0, @ID:='', @prevV := NULL) AS t 
ORDER BY id, d;

Allt du behöver göra är att lägga till ytterligare en variabel för att behålla värdet på föregående rad.




  1. Listkolumnnamn för användarvyer i Oracle

  2. Få totalt antal rader när du använder LIMIT?

  3. Kan en främmande nyckel skapas om båda fälten inte är unika?

  4. Infogar värde till databasen med hjälp av förberedd sats