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

SQL如何按name、end_date分组并取last_check最新日期对应的行

你原有查询的问题在于将fee也加入了GROUP BY的分组维度,相当于按name、end_date、fee三个字段分组,只要fee值不同就会被拆分为独立分组,自然无法正确获取每个name + end_date分组下最新last_check对应的整行数据。

可以使用Oracle的窗口函数实现需求,正确查询语句如下:

SELECT name, end_date, last_check, fee
FROM (
    SELECT 
        name, 
        end_date, 
        last_check, 
        fee,
        -- 按name、end_date分组,组内按last_check倒序排序,最新的排在第1位
        ROW_NUMBER() OVER (PARTITION BY name, end_date ORDER BY last_check DESC) AS rn
    FROM fees
) t
WHERE rn = 1;

逻辑说明

  • PARTITION BY name, end_date 就是你需要的双层分组规则,先按name拆分大组,再按end_date拆分成子组
  • ORDER BY last_check DESC 保证每个子组内最新的检查日期排在最前面
  • 外层过滤仅保留行号为1的行,也就是每个子组内最新的那条数据

如果你遇到同一个name + end_date分组下有多条完全相同的最新last_check记录,需要全部保留的话,把ROW_NUMBER()替换为RANK()即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:45:09