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

MySQL查询咨询:获取账户最新及上一笔交易记录

获取每个账户的最新及上一笔交易记录

我来帮你搞定这个查询需求!要从单表中提取每个账户的最新交易记录,同时带上上一笔交易的数据,用窗口函数是最简洁高效的方案,下面是具体实现:

完整SQL查询语句

SELECT
    account_no,
    MAX(CASE WHEN row_num = 1 THEN date1 END) AS `latest_entry(date)`,
    MAX(CASE WHEN row_num = 1 THEN price END) AS `latest_price`,
    MAX(CASE WHEN row_num = 2 THEN date1 END) AS `previous_entry(date)`,
    COALESCE(MAX(CASE WHEN row_num = 2 THEN price END), 0) AS `previous_price`
FROM (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY account_no ORDER BY date1 DESC) AS row_num
    FROM your_table_name
) ranked_transactions
GROUP BY account_no
ORDER BY account_no;

语句逻辑说明

  1. 子查询排序:用ROW_NUMBER()窗口函数,按account_no分组,每组内按date1降序排列,给每条记录分配序号——最新的交易是row_num=1,上一笔是row_num=2。
  2. 条件聚合转列:通过CASE WHEN配合MAX()函数,把每个账户的第1条、第2条交易数据分别提取成对应的列,实现一行展示一个账户的两条交易信息。
  3. 处理空值:用COALESCE()函数把没有上一笔交易的price值转为0,完全匹配你期望的输出格式。

测试结果(匹配你的示例数据)

如果用你提供的测试数据执行上述语句,会得到如下结果:

account_nolatest_entry(date)latest_priceprevious_entry(date)previous_price
1012018-04-101002018-04-07200
1022018-04-10300null0

注意:记得把语句中的your_table_name替换成你实际的表名哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:22:22