如何在子查询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
相关产品推荐
相关产品推荐

