sql >> Databáze >  >> RDS >> Mysql

Odečtěte hodnoty dvou řádků ve stejném sloupci pomocí skupiny Mysql podle ID

Vaše data jsou nesprávná. Když objednáváte podle tohoto sloupce, objednáváte nejdříve po dnech. Správné objednání je rok-měsíc-den. Použijte správný datový typ, datum a čas nebo časové razítko. Chcete-li to provést, můžete provést následující:

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`;

Dotaz k získání požadovaného výsledku je pak:

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;

Jediné, co musíte udělat, je přidat další proměnnou, která bude obsahovat hodnotu předchozího řádku.




  1. Proč zadané klíčové slovo není uloženo v databázi?

  2. Zpráva o připravenosti na online opravy R12.2

  3. org.hibernate.internal.util.config.ConfigurationException:Nelze najít zdroj cfg.xml [/HibernateTest/src/hibernate.cfg.xml]

  4. Jak převést počet minut do formátu hh:mm v TSQL?