gpt4 book ai didi

java - 计算每日最低余额

转载 作者:搜寻专家 更新时间:2023-11-01 02:54:24 24 4
gpt4 key购买 nike

假设我有一个名为 transaction 的表,其中包含 transaction_date、存款、取款字段。一天可能有也可能没有交易,但每天可以有多个交易。所以,我需要做的是给定一个日期范围,比如2010年12月1日到2010年12月31日,我需要计算出每一天的最低余额。假设在 2010 年 12 月 1 日之前也有交易。有没有人可以给我一些想法?

谢谢。

更新 示例

 tran_date   withdraw    deposit
2010-11-23 0.00 50.00
2010-12-10 0.00 50.00
2010-12-10 0.00 200.00
2010-12-12 100.00 0.00
2010-12-20 0.00 50.00
2010-12-20 70.00 0.00
2010-12-20 0.00 50.00
2010-12-20 0.00 50.00
2010-12-24 150.00 0.00

在上面的示例中,12 月 1 日12 月 10 日 的每日最低余额为 5012 月 10 日,有两笔存款总额为 70,但当天的最低余额为 50(从前一天结转)。

现在让我们看一下多笔交易。

12 月 20 日结转为 200。第一笔入金250,第二笔入金180,第三笔入金230,最后一笔交易入金 280 。因此,在当天的第二笔交易中取出 70 后,当天的最低余额为 180。是否可以使用 PostgreSQL 8.4 上的查询生成此文件,还是我应该使用其他方法?

最佳答案

编辑2
这是一个完整的例子,包括前一天的(最小)余额(据我所知,只有这么一小部分数据)。它应该在 8.4 上运行。

我重构了派生表以使用 CTE(公用表表达式)使其(希望)更具可读性:

WITH days AS (   -- generate a liste of possible dates spanning    -- the whole interval of the transactions   SELECT min(tran_date) + generate_series(0, max(tran_date) - min(tran_date)) AS some_date   FROM transaction),total_balance AS (  -- Calculate the running totals for all transactions  SELECT tran_id,         days.some_date as tran_date,          deposit,          withdrawal,         sum(deposit - withdrawal)              OVER (ORDER BY some_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as balance  FROM days   LEFT JOIN transaction t ON t.tran_date = days.some_date ),min_balance AS (  -- calculate the minimum balance for each day   -- (the smalles balance will have a '1' in the column balance_rank)  SELECT tran_id,          tran_date,         rank() OVER (PARTITION BY tran_date ORDER BY balance) as balance_rank,         balance  FROM total_balance)-- Now get everything, including the balance for the previous daySELECT tran_id,       tran_date,       balance,       lag(balance) over (order by tran_date) as previous_balanceFROM min_balanceWHERE balance_rank = 1;

关于java - 计算每日最低余额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4568521/

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