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

Nalezení rozdílu mezi dvěma hodnotami ve stejném sloupci v MySQL

Dobře, vrátil jsem se domů a dokázal jsem na to přijít.

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

Použije výsledky ze 2 poddotazů, každý s vlastním poddotazem k prvnímu a poslednímu záznamu pro daný rozsah.

Používal jsem integer pro stock_id , float za price a timestamp pro datum, protože mohou nastat problémy (zejména s MIN a MAX) s jinými datovými typy.




  1. Jak mohu prohledávat všechny sloupce v tabulce?

  2. proč PG::UniqueViolation:ERROR:duplicitní hodnota klíče porušuje jedinečné omezení?

  3. Spring Batch ORA-08177:nelze serializovat přístup pro tuto transakci při spuštění jedné úlohy, úroveň izolace SERIALIZOVANÁ

  4. Měli bychom zahrnout třídicí sloupec, primární klíč na složený index (MySQL)