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

如何在子查询WHERE子句中使用MAX DATE获取目标结果?

问题解答

你当前的SQL语句会报错,因为聚合函数(比如max())不能直接放在WHERE子句中——WHERE用于筛选单条级别的原始记录,而聚合函数是对一组数据做统计计算的,两者逻辑不匹配,无法直接混用。

要实现获取子查询中最大日期对应的BS值,有两种常用的可行写法:

方法一:子查询先获取最大日期,再关联筛选

select A.ARTIKEL,
       A.BEZEICH,
       (select B.BS from B
        where B.ARTIKEL = A.ARTIKEL 
          and B.BS = 'EA'
          and B.BUDATUM = (select max(BUDATUM) from B 
                           where ARTIKEL = A.ARTIKEL and BS = 'EA')) as BOOKINGS
from A
where A.ARTIKEL = '1236589'

方法二:用窗口函数排序取最新记录(适用于MySQL 8+、Oracle、SQL Server等支持窗口函数的数据库)

select A.ARTIKEL,
       A.BEZEICH,
       B.BS as BOOKINGS
from A
left join (
    select ARTIKEL, BS, BUDATUM,
           row_number() over(partition by ARTIKEL order by BUDATUM desc) as rn
    from B
    where BS = 'EA'
) B on A.ARTIKEL = B.ARTIKEL and B.rn = 1
where A.ARTIKEL = '1236589'

简单总结:如果要基于最大日期筛选记录,要么先通过子查询算出对应ARTIKEL的最大日期,再用该日期作为匹配条件;要么用窗口函数给同ARTIKEL的记录按日期倒序排序,取排序第一的那条(即最新日期的记录)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:17:04