sql >> Databasteknik >  >> RDS >> Mysql

Hitta skillnaden mellan två värden i samma kolumn i MySQL

Ok, kom hem och kunde ta reda på det här.

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

Använder resultaten från 2 underfrågor, var och en med sin egen underfråga till den första respektive sista posten för det intervallet.

Jag använde integer för stock_id , float för price och timestamp för datum, eftersom det kan finnas problem (särskilt med MIN och MAX) med andra datatyper.




  1. En till många/många till många SQL

  2. Frågeoptimering i PostgreSQL. FÖRKLARA Grunderna – Del 2

  3. T-SQL-buggar, fallgropar och bästa praxis – delfrågor

  4. MySQL BESTÄLLNING EFTER [anpassat SET-fältvärde]