【发布时间】:2021-05-28 10:10:16
【问题描述】:
为了计算调整后的成本基数 (ACB),它是价格 * 数量 + 佣金或先前 ACB/股份 * 数量的运行总和,具体取决于是销售还是购买。
我有下表,命名为transaction_t:
| Date | Action | Quantity | Price | Commission |
|---|---|---|---|---|
| 2021-01-02 | buy | 150 | 110.21 | 5.95 |
| 2021-01-21 | buy | 360 | 106.87 | 5.95 |
| 2021-03-21 | sell | 360 | 106.87 | 5.95 |
为了计算运行中的“调整成本基数”,我有以下查询:
SELECT
SUM(CASE
WHEN T.Action in ("buy", "reinvest") THEN T.Quantity
WHEN Action = "sell" THEN -T.Quantity
END
) OVER (ORDER BY T.Date) AS quantity_balance,
SUM(CASE
WHEN T.Action in ("buy", "reinvest") THEN T.Quantity * T.Price + T.Commission
WHEN T.Action = "sell" THEN T.Quantity * ***(previous_total_acb / previous_quantity_balance)***[1]
END
) OVER (ORDER BY T.Date) AS total_acb
FROM transaction_t AS T;
此查询无效。因为伪代码previous_total_acb / previous_quantity_balance 指的是在该窗口函数中定义的列。
如何在 SQLite 中完成这项工作?
注意[1]:这里的previous_total_acb 是一个伪代码,我打算让它引用列本身,total_acb。但是 sqlite 似乎不支持这种循环引用。
previous_quantity_balance 指的是同样由窗口函数创建的兄弟列quantity_balance。这似乎也不起作用。
【问题讨论】:
-
编辑您的问题并解释什么是previous_total_acb 和previous_quantity_balance,更好地使用示例数据和预期结果。