gpt4 book ai didi

MySQL 将当前行除以当前行 + 1

转载 作者:行者123 更新时间:2023-11-28 23:47:18 25 4
gpt4 key购买 nike

我的 MySQL 查询有问题。我有两个表,表货币和表 currency_detail。货币表包含货币代码,例如 USD、EUR、IDR 等。表 currency_detail 包含日期和汇率。在加入表格以获取 1 年内的所有汇率美元后,我的数据如下所示:

Date       | Rate
-------------------
2015-10-20 | 14463
2015-10-19 | 14452
2015-10-18 | 14442
2015-10-15 | 14371
2015-10-14 | 14322
2015-10-10 | 14306
2015-10-08 | 14322

我需要用当前行 + 1 来计算每个当前行。是否有可能得到这样的结果?

Date       | Rate  | PX
------------------------------
2015-10-20 | 14463 | 0.000761 -> LN(14463/14452)
2015-10-19 | 14452 | 0.000692 -> LN(14452/14442)
2015-10-18 | 14442 | 0.004928 -> LN(14442/14371)
2015-10-15 | 14371 | 0.003415 -> LN(14371/14322)
2015-10-14 | 14322 | 0.001118 -> LN(14322/14306)
2015-10-10 | 14306 | -0.00112 -> LN(14306/14322)
2015-10-08 | 14322 | 0 -> 0 (because no data after this row)

我试了很多方法,还是找不到解决办法。任何人都可以帮助查询吗?之前谢谢..

最佳答案

在标准 SQL 中,您可以简单地使用 LAG 从上一条记录中读取值。在 MySQL 中,您需要一种解决方法。最简单的方法可能是选择所有行两次并即时编号;然后你可以按行号加入:

select
this.rdate, this.rate,
ln(this.rate / prev.rate) as px
from
(
select @rownum1 := @rownum1 + 1 as rownum, rates.*
from rates
cross join (select @rownum1 := 0) init
order by rdate
) this
left join
(
select @rownum2 := @rownum2 + 1 as rownum, rates.*
from rates
cross join (select @rownum2 := 0) init
order by rdate
) prev on prev.rownum = this.rownum - 1
order by this.rdate desc;

顺便说一句,我不得不在两个子查询中使用不同的 rownum 变量名,否则 MySQL 会感到困惑。我认为这是一个缺陷,但我必须承认 MySQL 的变量在 SQL 中的东西对我来说仍然有点陌生:-)

SQL fiddle :http://www.sqlfiddle.com/#!9/341c4/7

关于MySQL 将当前行除以当前行 + 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33388457/

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