我有一个名为"bankStatement"的表,其中我们有bankaccount_id
,statement_date
,begining_balance
和ending_balance
作为列。我的要求是使用最近的statement_date
找到所有bankaccount_id
的期末余额。让我们以例如
bankaccount_id statement_date begining_balance ending_balance
-------------- ------------- ---------------- --------------
101 05-05-16 1500 1000
101 10-05-16 1000 2000
101 06-06-16 2000 500
现在我需要将结束余额的 06-06-16 日设为 500,但是当我尝试时
select bankaccount_id,max(statement_date),ending_balance from bankStatement
group by bankaccount_id,ending_balance
由于按ending_balance
分组,它提供了所有记录。如何解决这个问题以获得最终的期末余额。所以结果应该是这样的,
bankaccount_id statement_date ending_balance
-------------- ------------- ----------------
101 06-06-16 500
在子查询中查找最大对帐单日期,然后获取该帐户和对帐单日期的所有原始信息。
select bs.bankaccount_id,
bs.statement_date,
bs.ending_balance
from bankStatement bs
join (select bankaccount_id,
max(statement_date) max_statement_date
from bankStatement
group by bankaccount_id) max
on bs.bankaccount_id=max.bankaccount_id
and bs.statement_date = max.max_statement_date
您可以使用 Postgres 的不同扩展:
select
distinct on (bankaccount_id)
bankaccount_id, statement_date, ending_balance
from
bankstatement
order by
bankaccount_id, statement_date desc
在我看来,这种方法比使用 max 进行子选择更优雅、更安全(如果两条记录共享相同的时间戳怎么办?