如何在 SQLite 中计算不同利率的复利

2024-04-10

我需要按产品计算复利,其中利率可能因年份而异。

简化表如下。initial_value是第一年开始时产品的价值,final_value是相应年末的包括利息的价值。

product year    initial_value   interest    final_value
a         1       10000           0.03        10,300.00
a         2                       0.02        10,506.00
a         3                       0.01        10,611.06
b         1       15000           0.04        15,600.00
b         2                       0.06        16,536.00
b         3                       0.07        17,693.52

重新创建表:

CREATE TABLE temp (year INTEGER, product CHARACTER,
                   initial_value DECIMAL(10,2), interest DECIMAL(10,2));

INSERT INTO temp VALUES (1, 'a', 10000, 0.03);
INSERT INTO temp VALUES (2, 'a', 0, 0.02);
INSERT INTO temp VALUES (3, 'a', 0, 0.01);

INSERT INTO temp VALUES (1, 'b', 15000, 0.04);
INSERT INTO temp VALUES (2, 'b', 0, 0.06);
INSERT INTO temp VALUES (3, 'b', 0, 0.07);

以product = a为例,第3年的数字应计算为10000 * (1+0.03) * (1+0.02) * (1+0.01)

产品的年份和数量可能会有所不同,因此我想避免按年份转置数据,但遗憾的是无法想到另一种方法来跨行相乘以获得所需的结果。


你可以使用RECURSIVE CTE https://sqlite.org/lang_with.html:

WITH RECURSIVE cte AS (
  SELECT year, product, initial_value, interest, initial_value*(1+ interest) AS s
  FROM temp
  WHERE initial_value <> 0
  UNION ALL
  SELECT t.year, t.product, t.initial_value, t.interest, s * (1+t.interest)
  FROM temp t
  JOIN cte c
    ON t.product = c.product
    AND t.year = c.year+1
)
SELECT *
FROM cte
ORDER BY product, year;

Output:

┌──────┬─────────┬───────────────┬──────────┬─────────────┐
│ year │ product │ initial_value │ interest │ final_value │
├──────┼─────────┼───────────────┼──────────┼─────────────┤
│    1 │ a       │         10000 │     0.03 │       10300 │
│    2 │ a       │             0 │     0.02 │       10506 │
│    3 │ a       │             0 │     0.01 │    10611.06 │
│    1 │ b       │         15000 │     0.04 │       15600 │
│    2 │ b       │             0 │     0.06 │       16536 │
│    3 │ b       │             0 │     0.07 │    17693.52 │
└──────┴─────────┴───────────────┴──────────┴─────────────┘

EDIT

只是为了纯粹的乐趣,我使用窗口函数重写了它:

SELECT *,
    FIRST_VALUE(initial_value) OVER(PARTITION BY product ORDER BY year) 
    * exp (sum (ln (1+interest)) OVER(PARTITION BY product ORDER BY year))
FROM temp;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 SQLite 中计算不同利率的复利 的相关文章

  • 创建日期范围表

    我正在编写一份需要显示每天值的报告 我有查询的开始日期和结束日期 但我希望避免丢失日期 以防表不包含特定日期的值 我正在考虑创建一个基本日期范围表 其中包含开始和结束之间的所有日期 然后将其与数据表左连接以显示每一天的值 我找到了一些适用于
  • 如何使用 FieldDefs 在运行时创建新的 SQLite 文件和表?

    我正在使用 Delphi Seattle 在全新的 SQLite 文件中创建一个全新的表 并且仅使用 FieldDefs 和非可视代码 我可以使用 ExecSQL CREATE TABLE 语法创建一个表 但不能如下所示 我得到 没有这样的
  • SQL Server 2012:有条件地增加计数器用户 ROW_NUMBER()

    我正在尝试申请ROW NUMBER 根据特定条件增加计数器 我的数据如下所示 目标计数器是Prep column id DSR PrepIndicator Prep 1662835 1 1 1 1662835 14 2 2 1662835
  • SQL UPDATE 语句根据另一个现有行更新列

    基本上我有一个与下表具有相似格式的表格 我想做的是根据这个逻辑更新 Col4 如果 Col2 为空 则用 Col3 更新 Col4 如果 Col2 不为 null 则在 Col1 中查找与 Col2 中的值匹配的值 使用 col3 中的相应
  • 使用条件 SQL 统计每月汇总记录

    我有一张桌子 我们就叫他们桌子吧SUMMARYDATA NIP NAME DEPARTMENT STATUSIN STATUSOUT TOTALLOSTTIME A1 ARIA BB 2020 01 21 08 06 23 2020 01
  • Extbase - 从查询中获取创建的sql

    我想从我的typo3 扩展中获取一些数据库表 该扩展基于 extbase 查询总是不返回任何内容 但数据存在 我试过这个 query this gt createQuery query gt statement SELECT FROM my
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • Android:打开和关闭SQLite数据库

    我正在开发Android应用程序 我经常在其中访问本地数据库 该数据库可以从不同的主题访问 因此我遇到了数据库的协调问题 我使用以下open and close method public void open mDb mDbHelper g
  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • SQL Server 2008 错误 233

    我正在使用以下 sql 脚本在 SQL Server 2008 中创建新登录名 CREATE LOGIN xyz WITH PASSWORD xyz DEFAULT DATABASE master DEFAULT LANGUAGE us e
  • 一个表可以有多个主键吗?

    我现在很困惑 也许你可以帮助我更好地理解这个问题 即一个表可以有两个主键 如果是 那么如何 如果没有 那为什么 您询问是否可以有多个主键field你当然可以 您只能有一个主键 但它可以包含唯一标识行所需的任意数量的列 创建表时使用类似这样的
  • 何时在 mysql 中使用 Union [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于 Union 您会在什么现实情况下使用它 因为对我来说 对具有不同列用途 含义的两个表中的两个选择查询使用联合是没有意义的 例如
  • SQLite 返回错误的 2013 年周数?

    我有一个简单的 SQL 来计算 SQLite 报告中的周数 SELECT STRFTIME W date column 2009 2012 年的数据是正确的 2013 年我总是得到错误的周数 例如 SELECT STRFTIME W 201
  • 当从属文本框中没有输入文本时,如何让 gridview 显示所有表格行?

    下面的代码可以正常工作 并根据文本框中输入的文本过滤我的网格视图 当我的文本框中没有输入任何文本时 我没有得到任何结果 并且无法理解为什么 我的问题 如何让gridview显示all当文本框中没有输入文本时表行 MSSQL Search n
  • 包含列和行总计的 SQL 数据透视表

    我正在尝试将行和列总计添加到该数据透视表中 create table test4 city nvarchar 10 race nvarchar 30 sex nvarchar 10 age int insert into test4 val
  • 如何将SQL数据加载到Hortonworks中?

    我已在我的电脑中安装了 Hortonworks SandBox 还尝试使用 CSV 文件 并以表结构的方式获取它 这是可以的 Hive Hadoop nw 我想将当前的 SQL 数据库迁移到沙箱 MS SQL 2008 r2 中 我将如何做
  • 将两个表合并为一个输出

    假设我有两张表 已知营业时间 ChargeNum CategoryID Month Hours 111111 1 2 1 09 10 111111 1 3 1 09 30 111111 1 4 1 09 50 222222 1 3 1 09
  • SQL 使用另一列的键和最大值设置列

    我需要根据同一 ID 的 duration 列的最大值更新 max register 列 将值设置为 1 其他值设置为 0 初始表 Id duration max register 1 0 0 1 7 0 1 3 0 2 10 0 2 5
  • 时间序列数据的自连接

    我需要一些帮助来完成我认为应该是相当简单的自连接查询 只需要将两条记录中匹配的开始时间和结束时间合并为一条记录 假设我的表中有以下内容 Time Event 08 00 Start 09 00 Stop 10 30 Start 10 45
  • 在android中创建SQLite数据库

    我想在我的应用程序中创建一个 SQLite 数据库 其中包含三个表 我将向表中添加数据并稍后使用它们 但我喜欢保留数据库 就好像第一次安装应用程序时它会检查数据库是否存在 如果存在则更新它 否则如果不存在则创建一个新数据库 此外 我正在制作

随机推荐

  • Ngxs - 调用 Angular 服务:好的做法吗?

    当我使用ngxs我的应用程序应该做什么 我的组件调用一个服务 并且该服务调度一个操作 结果作为有效负载 我的组件调度一个动作 我的 状态调用服务 我的观点是 Dispatched Action 本身应该是不可变的 并且不用于返回结果 相反
  • 如何从我的应用程序启动默认音乐播放器?

    我制作了一个应用程序ListView 当我点击ListView项目 一个 ogg声音文件应该开始播放 不在我的应用程序中 而是在用户的默认音乐播放器应用程序中 我怎样才能做到这一点 Try this Intent it new Intent
  • Java - 作为普通代码运行字符串[重复]

    这个问题在这里已经有答案了 有没有办法将字符串作为代码运行 我的意思是如果我运行的字符串有价值System out println Hello World 我可以像普通代码一样运行该字符串 然后输出将是 Hello World 吗 例如 S
  • 如何将单个图像转换为 MP4 视频?

    如何将单个图像转换为 mp4 视频 例如 我需要播放同一张图像20秒 持续时间将是动态的 我知道这是可能的ffmpeg 我在谷歌和SO中搜索 但不幸的是 我无法找到正确的教程 我只是想要一个正确的方向 欢迎任何意见或建议 基本语法是 ffm
  • 无法登录在 django 管理后端创建的超级用户

    我试图在 django 管理后端创建超级用户 但不知何故我无法让他们登录 这是我的用户类别 class User AbstractBaseUser PermissionsMixin email models EmailField uniqu
  • 如何在点击时将图像设置为背景图像?

    我有一个活动显示带有不同图像的网格视图 当单击其中一个图像时 我希望单击的图像成为另一个活动的背景图像 我怎样才能做到这一点 这是我的活动 显示网格视图 public class HelloGridViewActivity extends
  • 在 Python Pandas 中将列转换为行

    我有以下 Python pandas 数据框 fruits numFruits 0 apples 10 1 grapes 20 2 figs 15 I want apples grapes figs Market 1 Order 10 20
  • 如何在omnet++ Veins中实现RSU到RSU通信?

    我正在尝试在 Veins 中实现 RSU 到 RSU 的通信 为此 我在 RSU 模块 RSU ned 文件 中添加了一个输入输出门 module RSU parameters string applType type of the app
  • 将班次数据(开始和结束时间)分解为每小时数据

    我有一个 df 如下 显示一个人何时开始轮班 结束轮班 工作时数和日期 Business Date Number PayTimeStart PayTimeEnd Hours 0 2019 05 24 1 2019 05 24 11 00 0
  • 在 python 脚本中使用 easy_install ?

    easy install python 扩展允许从控制台安装 python Egg 例如 easy install py2app 但是是否可以在 python 脚本中访问 easy install 功能 我的意思是 不调用 os syste
  • Vim 命令日志

    是否可以记录我在 VIM 中输入的所有命令以供以后分析 我的意思是每个简单的命令 例如动作或更改文本 即jjjjjjkkkcw
  • mySLComposerSheet 上的格式字符串未使用错误数据参数

    我有点困惑为什么我收到错误 格式字符串未使用数据参数 有其他人在 iOS6 的 Xcode 4 5 中得到这个或修复这个问题吗 IBAction facebookPost id sender if SLComposeViewControll
  • jQuery 验证将类添加到错误元素?

    我有以下使用 jQuery Validate 的代码 register validate debug true errorClass error validClass success errorElement span highlight
  • jquery 如果 div id 有孩子

    This if 条件给我带来了麻烦 if div id myfav has children do something else do something else 我尝试了以下所有方法 if myfav hasChildren do so
  • nasm idiv 为负值

    尝试将正数除以负数 目前我的程序将正确划分 并且我可以正确访问其余部分 但是当我输入一个正数除以一个负值时 它根本不会被除 我知道有一种方法可以 签名扩展 并且它会正确划分 我只是看不懂说明书 movsss imm reg reg mem
  • Windows 8 Metro javascript 应用程序绑定到表

    我在 javascript Metro 应用程序中绑定表格时遇到问题 而不是与模板中提供的 html 绑定 它会放入大量 div 并将 json 呈现为字符串 这就是我所拥有的 tr td td td td td td tr table t
  • sizeof 运算符的实现

    我尝试过实现 sizeof 运算符 我是这样做的 define my sizeof x x 1 x 但对于任一数据类型 结果总是为 1 然后我用谷歌搜索了一下 发现了以下代码 define my size x char x 1 char x
  • 尽管我设置了环境变量,NODE_ENV 显示未定义

    我正在使用 webstorm 并尝试使用设置环境变量 set NODE ENV development 当我使用检查环境变量时 echo NODE ENV 我得到的答案是发展 但是在我的节点应用程序中 当我使用检查变量时 var b pro
  • 单击按钮时,无法识别的选择器发送到实例错误

    我不完全确定为什么会出现此错误 当我单击 FirstViewController 上的按钮时会发生这种情况 Terminating app due to uncaught exception NSInvalidArgumentExcepti
  • 如何在 SQLite 中计算不同利率的复利

    我需要按产品计算复利 其中利率可能因年份而异 简化表如下 initial value是第一年开始时产品的价值 final value是相应年末的包括利息的价值 product year initial value interest fina