gpt4 book ai didi

mysql - 如何计算不同行的数据

转载 作者:行者123 更新时间:2023-11-29 06:34:19 24 4
gpt4 key购买 nike

我有下表来监控每天的价格,我想在两天之间进行计算,例如今天的收盘价 - 前一天开盘价,例如周四收盘价 - 周三开盘价,因此我可以看到差异。

此外,周末没有记录,所以我如何进行2次不同的计算,例如 1. 周一收盘价 - 周日返回相同的周一价格, 2. 周一收盘价 - 前周五开盘价等

INSERT INTO goods(date,day,open,high,low,close,`range(daily high- low)`) VALUES
('2018-11-01','Thu',1.08430,1.08766,1.08175,1.08285,0.00591),
('2018-11-02','Fri',1.08319,1.08585,1.07988,1.07988,0.00597),
('2018-11-05','Mon',1.08258,1.08389,1.08011,1.08155,0.00378),
('2018-11-06','Tue',1.08160,1.08489,1.07461,1.07469,0.01028),
('2018-11-07','Wed',1.07543,1.07646,1.07094,1.07150,0.00552),
('2018-11-08','Thu',1.07148,1.07571,1.07083,1.07393,0.00488),
('2018-11-09','Fri',1.07409,1.07651,1.07124,1.07125,0.00527),
('2018-11-12','Mon',1.07190,1.07389,1.06759,1.06878,0.00630),
('2018-11-13','Tue',1.06830,1.06977,1.06609,1.06658,0.00368)

理想输出1:

  date,         day, open,    high,   low,close, diff
('2018-11-01','Thu',1.08430,1.08766,1.08175,1.08285, ..
('2018-11-02','Fri',1.08319,1.08585,1.07988,1.07988, - 0.00442
('2018-11-05','Mon',1.08258,1.08389,1.08011,1.08155,- 0.00164
('2018-11-06','Tue',1.08160,1.08489,1.07461,1.07469,-0.00789

输出2:

  date,         day, open,    high,   low,close, diff
('2018-11-01','Thu',1.08430,1.08766,1.08175,1.08285, ..
('2018-11-02','Fri',1.08319,1.08585,1.07988,1.07988, - 0.00442
('2018-11-05','Mon',1.08258,1.08389,1.08011,1.08155, 1.08155
('2018-11-06','Tue',1.08160,1.08489,1.07461,1.07469,-0.00789

我使用的是php7.1,mysql

最佳答案

如果您使用的是 MySQL 8.0,则可以使用 LAG() 访问按日期排序的前一条记录。这将很高兴地忽略天数差距,因此周一收盘价将与周五开盘价进行比较:

SELECT
g.*,
g.close - LAG(g.open) OVER(ORDER BY g.date) price_diff
FROM goods g

Demo on DB Fiddle

<小时/>

使用旧版本的 MySQL,通常会使用自联接和带有 NOT EXISTS 条件的相关子查询来检索上一条记录:

SELECT g.*, g.close - g1.open price_diff
FROM goods g
LEFT JOIN goods g1
ON g1.date < g.date
AND NOT EXISTS (
SELECT 1 FROM goods g2 WHERE g2.date < g.date AND g2.date > g1.date
)

g 是当前记录(例如:今天)。 g1 代表昨天的记录:为了识别它,我们指示 RDBMS:

  • g1 的日期低于 g 的日期
  • 不存在日期低于今天 (g) 且高于昨天 (g1) 的记录 (g2)

这两个条件的组合允许 RDMS 唯一标识相关记录(昨天的),然后可以在计算中使用其值。

Demo on DB Fiddle

关于mysql - 如何计算不同行的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54622899/

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