mysql - MySQL LN 带除法
问题描述
在 MySQL 5.7 中,我试图计算加密货币的每日回报。这个计算是LN(Day2Close/Day1Close)
。
我的表结构如下。CoinIndex 包括每个硬币中的天数。所以BTC数据第一天的coinIndex为1,ETH数据的第一天coinIndex也为1。每天都有数据:
CREATE TABLE `histoday2` (
`id` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`coinId` mediumint(7) DEFAULT NULL COMMENT 'Crypto Compare CoinID',
`time` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`fsym` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`tsym` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`close` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`high` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`low` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`open` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`volumefrom` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`volumeto` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`coinIndex` int(11) DEFAULT NULL,
`totalReturn` decimal(6,2) DEFAULT NULL,
UNIQUE KEY `id` (`id`)
)
我的查询抛出 LN() 只能包含一个操作数的错误。我不确定如何构造此查询:
SELECT coinId, time, close,
(SELECT close, LN(A.close/close)
FROM histoday2
WHERE coinIndex = A.coinIndex -1
AND coinId = A.coinId) B
FROM histoday2 A;
解决方案
您不能使用将两列作为表达式返回的子查询。子查询表达式最多只能返回一行,其中只有一列。
在子查询中使用JOIN
而不是返回前一天的收盘价和 LN。
SELECT a.coinid, a.time, a.close AS close_yesteday, b.close AS close_today, LN(a.close/b.close) AS return_rate
FROM histoday2 AS a
JOIN histoday2 AS b ON a.coinid = b.coinid AND a.coinIndex = b.coinIndex - 1
推荐阅读
- java - 我有一个形状不同的框架,我想移动它,但到目前为止只有一个移动
- firebase - Chrome 扩展程序不允许来自 firebase 的外部脚本
- node.js - DynamoDB 异常 - 提供的 AttributeValue 设置了多个数据类型
- prolog - 序言。为变量赋值后,程序输出从 `yes` 变为 `no`
- anaconda - 将 Python 解释器设置为新环境后无法启动 spyder 内核
- c++ - 什么是类的静态对象,在类定义中,调用类的静态成员函数有哪些不同的方法?
- python - 我无法使用 vscode 运行 jupyter
- javascript - 使用给定用户 ID 的 Gmail API 身份验证
- ruby - 哪个更有效:respond_to?还是什么都不做的方法?
- vba - 每个循环的 VBA