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

嵌套SELECT返回多条记录:如何获取指定条件的最大日期转账金额

问题分析与解决方法

错误原因

你踩了一个常见的子查询陷阱——外层查询只过滤了transfer_date,没有和子查询保持一致的brew_id=20以及active=1的限定条件。

子查询确实正确找到了brew_id=20且active=1的最大transfer_date,但外层查询没有限制记录必须属于目标brew_id且是活跃状态,所以只要有任何记录(哪怕是active=0的)的transfer_date匹配这个最大值,都会被拉出来——这就是你看到那条非活跃1500记录的原因。

无需临时表的解决方法

这里有几种简单的修正方式,都不需要创建临时表或复杂改动:

方法1:外层补充完整过滤条件

直接在外层查询里加上和子查询一致的brew_id与active条件,确保只筛选目标范围内的记录:

SELECT transfer_amount 
FROM brew_transfer 
WHERE brew_id = 20 
  AND active = 1 
  AND transfer_date = (
    SELECT MAX(transfer_date) 
    FROM brew_transfer 
    WHERE brew_id = 20 AND active = 1
  );

方法2:使用窗口函数(更灵活)

如果未来可能出现多条active=1且日期同为最大值的记录,窗口函数可以一次性返回所有符合条件的结果:

SELECT transfer_amount
FROM (
  SELECT transfer_amount,
         -- 按brew_id分组,按transfer_date倒序排名
         RANK() OVER (PARTITION BY brew_id ORDER BY transfer_date DESC) AS date_rank
  FROM brew_transfer
  WHERE brew_id = 20 AND active = 1
) ranked_transfers
WHERE date_rank = 1;

方法3:用ORDER BY + LIMIT(简单直接)

如果可以确定每个brew_id+active=1的组合下,最大日期对应的记录只有一条,这种方式最简洁高效:

SELECT transfer_amount
FROM brew_transfer
WHERE brew_id = 20 AND active = 1
ORDER BY transfer_date DESC
LIMIT 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:42:55