Mysql
 sql >> база данни >  >> RDS >> Mysql

Намиране на разликата между две стойности в една и съща колона в MySQL

Добре, прибрах се вкъщи и успях да разбера това.

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

Използва резултатите от 2 подзаявки, всяка със собствена подзаявка към първия и последния, съответно, запис за този диапазон.

Използвах integer за stock_id , float за price и timestamp за дата, тъй като може да има проблеми (особено с MIN и MAX) с други типове данни.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL сравнение на дати

  2. Възможно ли е да се вмъкне нов ред в горната част на MySQL таблицата?

  3. Как да използвам ON DUPLICATE KEY UPDATE в MySQL без УНИКАЛЕН индекс или ПЪРВИЧЕН КЛЮЧ?

  4. ефективен за паметта вграден SqlAlchemy итератор/генератор?

  5. Промяна на колона срещу промяна на колона