Mysql
 sql >> Base de données >  >> RDS >> Mysql

Trouver la différence entre deux valeurs dans la même colonne dans MySQL

Ok, je suis rentré à la maison et j'ai pu comprendre cela.

SELECT stock_id, t1.price AS `then`, t2.price AS `now`, ROUND(t2.price - t1.price, 2) AS `difference`
FROM (
        SELECT stock_id, price, date FROM share_prices sp
        WHERE  date = (SELECT MIN(date) FROM share_prices sp2
                       WHERE date BETWEEN '2010/02/23 10:00:00'
                       AND '2010/02/24 10:00:00'
                       AND sp2.stock_id = sp.stock_id)
    ) t1
    JOIN
    (
        SELECT stock_id, price, date FROM share_prices sp
        WHERE  date = (SELECT MAX(date) FROM share_prices sp2
                       WHERE date BETWEEN '2010/02/23 10:00:00'
                       AND '2010/02/24 10:00:00'
                       AND sp2.stock_id = sp.stock_id)
    ) t2 USING(stock_id)
ORDER BY `difference` DESC

Utilise les résultats de 2 sous-requêtes, chacune avec sa propre sous-requête pour le premier et le dernier enregistrement, respectivement, de cette plage.

J'utilisais integer pour stock_id , float pour price et timestamp pour la date, car il peut y avoir des problèmes (notamment avec le MIN et le MAX) avec d'autres types de données.