Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Znajdowanie różnicy między dwiema wartościami w tej samej kolumnie w MySQL

OK, wróciłem do domu i udało mi się to rozgryźć.

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

Wykorzystuje wyniki z 2 podzapytań, każde z własnym podzapytaniem, odpowiednio do pierwszego i ostatniego rekordu dla tego zakresu.

Używałem integer dla stock_id , float za price i timestamp na dzień dzisiejszy, ponieważ mogą wystąpić problemy (zwłaszcza z wartościami MIN i MAX) z innymi typami danych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego transakcje nie są wycofywane podczas używania SpringJUnit4ClassRunner/MySQL/Spring/Hibernacja

  2. Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/tmp/mysql.sock

  3. Schemat XSD do MySQL

  4. Nie można załadować klasy sterownika JDBC [com.mysql.jdbc.Driver]

  5. Błąd importowania Pythona MySQLdb — Mac 10.6