如何在不向外层SELECT加子查询的前提下改写SQL查询
改写SQL查询获取最大日期(符合Hibernate 5.x限制)
你的原查询通过LEFT JOIN result表时在ON条件中匹配单条最大日期记录,但无法正确返回最大日期(显示为NULL)。以下是符合要求的改写方式,既不在外层SELECT子句添加子查询,也不新增WHERE子句:
select qt.id as id, ev.id as event_id, res_max.max_date as date from quota qt left join ( select quota_fk, max(allocation_date) as max_date from result group by quota_fk ) res_max on qt.id = res_max.quota_fk left join event ev on qt.id = ev.quota_fk
改写说明:
- 先对
result表做聚合查询,按quota_fk分组,直接计算每个配额对应的最大分配日期,生成临时结果集res_max - 将
quota表与这个临时结果集做LEFT JOIN,确保每个配额都能关联到对应的最大日期(无匹配时显示NULL) - 保留原有的与
event表的关联逻辑,不影响id和event_id的输出
如果需要处理无匹配时的默认日期,可以用COALESCE(res_max.max_date, '默认日期值') as date来调整。
内容的提问来源于stack exchange,提问作者treo
相关产品推荐
相关产品推荐

