gpt4 book ai didi

mysql - 查找MySQL中同一列中两个值之间的差异

转载 作者:行者123 更新时间:2023-11-29 01:19:17 25 4
gpt4 key购买 nike

我有一个名为 MySQL 的简单表,其中包含股价:

Table `share_prices`

+----------+-------+---------------------+
| stock_id | price | date |
+----------+-------+---------------------+
| 1 | 0.05 | 2010-02-24 01:00:00 |
| 2 | 3.25 | 2010-02-24 01:00:00 |
| 3 | 3.30 | 2010-02-24 01:00:00 |
| 1 | 0.50 | 2010-02-23 23:00:00 |
| 2 | 1.90 | 2010-02-23 23:00:00 |
| 3 | 2.10 | 2010-02-23 23:00:00 |
| 1 | 1.00 | 2010-02-23 19:00:00 |
| 2 | 1.00 | 2010-02-23 19:00:00 |
| 3 | 1.00 | 2010-02-23 19:00:00 |
+----------+-------+---------------------+

每次更新股价时,表格中都会插入一个新行。

使用这种结构,我如何返回显示过去 24 小时内价格变化的查询?

期望的结果是:

+----------+------+------+------------+
| stock_id | then | now | difference |
+----------+------+------+------------+
| 3 | 1.00 | 3.30 | 2.30 |
| 2 | 1.00 | 3.25 | 2.25 |
| 1 | 1.00 | 0.05 | -0.95 |
+----------+------+------+------------+

解决此问题的最佳方法是什么?某种加入?子查询?

我认为我的目标是本质上查询一次以获取 then,再次查询以获取 now,然后以某种方式在最后将它们粘合在一起。

编辑:我也需要考虑负面变化。

最佳答案

好的,回到家,并且能够解决这个问题。

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_idfloat 作为 pricetimestamp对于日期,因为其他数据类型可能存在问题(尤其是 MIN 和 MAX)。

关于mysql - 查找MySQL中同一列中两个值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2326733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com