MariaDB版本10.4.10。
我有一个股票搜寻器脚本,该脚本每小时获取一次股票数据,并将其插入到MySQL数据库中。数据库结构与此类似:
stocks( time_fetched DATETIME, fetch_id INT, name VARCHAR, price INT )
还有一些示例数据:
**time_fetched fetch_id name price**
2020-03-10 09:00:00 1 stock1 10
2020-03-10 09:00:00 1 stock2 15
2020-03-10 10:00:00 2 stock1 12
2020-03-10 10:00:00 2 stock2 20
2020-03-10 11:00:00 3 stock1 8
2020-03-10 11:00:00 3 stock2 18
我想要一种获取每种股票价格变化的方法,例如,在09:00和10:00或09:00和11:00之间取入的股票。这样的东西(伪代码):
SELECT *, DIFF( current_price, price_one_hour_ago) AS change_1h, DIFF( current_price, price_two_hours_ago) AS change_2h
是否可以直接在MySQL中执行此操作?我正在使用PHP脚本显示数据,所以我可能不得不求助于PHP。
您可以使用CTE
来生成延迟1或2个小时的价格,然后使用这些值(可能使用COALESCE
来将NULL
值变成0
)来计算更改:
WITH prices AS (
SELECT time_fetched, name, price,
LAG(price, 1) OVER(PARTITION BY name ORDER BY time_fetched) AS price_1h,
LAG(price, 2) OVER(PARTITION BY name ORDER BY time_fetched) AS price_2h
FROM stocks
)
SELECT time_fetched, name, price,
COALESCE(price - price_1h, 0) AS change_1h,
COALESCE(price - price_2h, 0) AS change_2h
FROM prices
输出:
time_fetched name price change_1h change_2h
2020-03-10 09:00:00 stock1 10 0 0
2020-03-10 10:00:00 stock1 12 2 0
2020-03-10 11:00:00 stock1 8 -4 -2
2020-03-10 09:00:00 stock2 15 0 0
2020-03-10 10:00:00 stock2 20 5 0
2020-03-10 11:00:00 stock2 18 -2 3
dbfiddle上的演示还显示了不带的查询结果COALESCE
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句