对先前值求和的条件- SQLite

rnmwe5a2  于 2022-11-24  发布在  SQLite
关注(0)|答案(1)|浏览(115)

我的以下SQLite数据库:

解释巴西税收收入:
a)如果我有损失,我不需要支付任何税款(例如:一月)
B)可以从下一个月的阳性结果中减去阴性结果(例如:在二月份,该税只适用于(5942 - 3200)= 2742,而不是支付5942美元的全部税款。
c)如果前一次的负面结果不足以覆盖下一次的正面结果,我就得交税(例如:在9月份,我可以从6月份和7月份进行补偿,但我必须从8月份进行合计(例如:纳税总额= -5000 -2185 +5000 +3000 = 815)
我的目标是构建下表:

我想不出解决这个问题的方法。有什么帮助吗?
标记

q5iwbnjs

q5iwbnjs1#

这里需要使用递归CTE。如果你不熟悉这个特性,你可以查看我的tutorial,该教程中引用的官方文档,以及Internet上提供的任何数量的其他教程。
首先,我使用下面的 source CTE块中的 row_numberWindow function生成临时行号(将“RESULTS”替换为表名)。然后使用递归CTE(* loss *)计算前几个月的剩余损失,可用于减少您的税款。(如果您不熟悉递归CTE,这一部分可能很难理解。)最后,如果必要,我将计算针对以前的剩余损失调整的应纳税总额。

WITH RECURSIVE
    source AS (
        SELECT row_number() OVER (ORDER BY ym) AS rid, *
        FROM RESULTS
    ),
    losses AS (
            SELECT s.*, 0 AS res_loss
            FROM source AS s
            WHERE rid = 1
        UNION ALL
            SELECT s.*, iif(l.res_loss + l.profitloss < 0, l.res_loss + l.profitloss, 0) AS res_loss
            FROM source AS s, losses AS l
            WHERE s.rid = l.rid + 1
    )
SELECT ym, profitloss, iif(profitloss + res_loss > 0, profitloss + res_loss, 0) AS tax
FROM losses
ORDER BY ym;

相关问题