You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL在列值匹配时选取指定列最大值行 实现账户日终余额查询

解决方案

方案1:窗口函数实现(兼容所有支持SQL:2003标准的主流数据库,如MySQL 8.0+、PostgreSQL、SQL Server、Oracle等)

这种写法可读性高、执行效率好,是优先推荐的方案:

SELECT Date, TransactionId, ClosingBalance, AccountId
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY AccountId, Date 
            ORDER BY TransactionId DESC
        ) AS rn
    FROM 交易表名 -- 替换为你实际的表名
) t
WHERE rn = 1;

逻辑说明:

  • 用PARTITION BY AccountId, Date把数据按「账户+交易日期」分组,每个组就是单个账户单日的所有交易
  • 组内按TransactionId倒序排序,序号为1的就是当前组交易ID最大的记录,也就是当日最后一笔交易
  • 最后过滤只保留序号为1的记录即可得到期望结果

方案2:子查询匹配实现(兼容不支持窗口函数的低版本数据库,如MySQL 5.x)

如果你的数据库版本比较老,不支持窗口函数,可以用这种写法:

SELECT t1.*
FROM 交易表名 t1
INNER JOIN (
    SELECT AccountId, Date, MAX(TransactionId) AS max_tid
    FROM 交易表名
    GROUP BY AccountId, Date
) t2 ON t1.AccountId = t2.AccountId 
    AND t1.Date = t2.Date 
    AND t1.TransactionId = t2.max_tid;

逻辑说明:

  • 先通过子查询统计出每个账户、每个日期对应的最大交易ID
  • 再把原表和这个统计结果关联,匹配到对应最大交易ID的完整记录即可

两种方案执行后输出的结果和你给出的期望结果完全一致。

内容的提问来源于stack exchange,提问作者realmvpisme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 22:39:03