gpt4 book ai didi

mysql - 如何计算复杂分组依据后前一行/天的百分比增加?

转载 作者:可可西里 更新时间:2023-11-01 08:06:33 26 4
gpt4 key购买 nike

我有一张 IntradayPrices1Minute 表,其中存储了1 分钟 时间范围的股票开盘价、最高价、最低价和收盘价:

  CREATE TABLE `IntradayPrices1Minute` (
`ticker` varchar(10) NOT NULL DEFAULT '',
`datetime` datetime NOT NULL,
`volume` mediumint(11) unsigned NOT NULL,
`open` decimal(8,4) unsigned NOT NULL,
`high` decimal(8,4) unsigned NOT NULL,
`low` decimal(8,4) unsigned NOT NULL,
`close` decimal(8,4) unsigned NOT NULL,
PRIMARY KEY (`datetime`,`ticker`),
UNIQUE KEY `indxTickerDatetime` (`ticker`,`datetime`) USING BTREE
)

我已经成功地构建了一个查询,可以计算这些股票的每日开盘价、最高价、最低价和收盘价。这是查询:

SELECT 
ticker,
DATE(datetime) AS 'Date',
SUBSTRING_INDEX( GROUP_CONCAT(CAST(open AS CHAR) ORDER BY datetime), ',', 1 ) as 'Daily Open',
max(GREATEST(open, high, low, close)) AS 'Daily High',
min(LEAST(open, high, low, close)) AS 'Daily Low',
SUBSTRING_INDEX( GROUP_CONCAT(CAST(close AS CHAR) ORDER BY datetime DESC), ',', 1 ) as 'Daily Close'

FROM
IntradayPrices1Minute

GROUP BY
ticker, date(datetime)

这是此查询成功返回的结果的一部分:

ticker  Date        Open    High    Low     Close
---- ---------- ------ ------ ------ ------
AAAE 2012-11-26 0.0100 0.0100 0.0100 0.0100
AAAE 2012-11-27 0.0130 0.0140 0.0083 0.0140
AAAE 2012-11-28 0.0140 0.0175 0.0140 0.0165
AAAE 2012-11-29 0.0175 0.0175 0.0137 0.0137
AAMRQ 2012-11-26 0.4411 0.5300 0.4411 0.5290
AAMRQ 2012-11-27 0.5100 0.5110 0.4610 0.4950
AAMRQ 2012-11-28 0.4820 0.4900 0.4300 0.4640
AAMRQ 2012-11-29 0.4505 0.4590 0.4411 0.4590
AAMRQ 2012-11-30 0.4500 0.4570 0.4455 0.4568

现在的问题是:我想返回查询中的第七列,计算每天收盘价与前一天收盘价之间的增/减百分比。

我在 StackOverflow 上看到过类似的问题,但针对的是每日价格已经在表格中的情况。我认为这在我的案例中特别复杂,因为每日价格是在查询时经过多次分组计算后获得的。

如有任何帮助,我们将不胜感激。非常感谢。博加

最佳答案

请看这个引用:SQLFIDDLE

因此,您当前使用 OHLC 的表用于导出 px_change、px_pct :)结果已四舍五入以显示 4 个小数点的变化和百分比。Null 用于显示没有价格变化/pct,因为 null 可以更好地表示没有价格变化而不是零价格变化;)

查询:

select ticker, date_format(date,'%m-%d-%Y') as date, open, high,low,close,
pxchange,concat(round(pxpct*100,4),'%') pxpct
from (select case when ticker <> @pxticker
then @pxclose := null end, p.*, (close-@pxclose) as pxchange,
(close-@pxclose)/@pxclose as pxpct, (@pxclose := close),
(@pxticker := ticker) from pricing p
cross join
(select @pxclose := null, @pxticker := ticker
from pricing
order by ticker, date limit 1) as a
order by ticker, date ) as b
order by ticker, date asc

结果:

TICKER  DATE        OPEN    HIGH    LOW     CLOSE   PXCHANGE  PXPCT
AAAE 11-26-2012 0.01 0.01 0.01 0.01 (null) (null)
AAAE 11-27-2012 0.013 0.014 0.0083 0.014 0.004 40.0000%
AAAE 11-28-2012 0.014 0.0175 0.014 0.0165 0.0025 17.8571%
AAAE 11-29-2012 0.0175 0.0175 0.0137 0.0137 -0.0028 -16.9697%
AAMRQ 11-26-2012 0.4411 0.53 0.4411 0.529 (null) (null)
AAMRQ 11-27-2012 0.51 0.511 0.461 0.495 -0.034 -6.4272%
AAMRQ 11-28-2012 0.482 0.49 0.43 0.464 -0.031 -6.2626%
AAMRQ 11-29-2012 0.4505 0.459 0.4411 0.459 -0.005 -1.0776%
AAMRQ 11-30-2012 0.45 0.457 0.4455 0.4568 -0.0022 -0.4793%

** 根据 OP 在评论中的要求更新了图片以显示括号 ** :)

enter image description here

关于mysql - 如何计算复杂分组依据后前一行/天的百分比增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13671230/

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