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

Oracle SQL如何获取单条最新日期的分类数据?

解决Oracle SQL获取最新category数据的问题

你的问题出在窗口函数的分区条件里包含了category,导致每个category单独计算了自身的最大日期,所以两行结果都被保留。要拿到contract、part_no、niin分组下最新日期对应的category,可以用以下两种简单方法:

方法一:使用ROW_NUMBER()窗口函数

这是最直接的方式,通过窗口函数给每个分组内的行按日期倒序编号,取编号为1的行就是最新数据:

SELECT contract, part_no, niin, category, date_entered AS most_recent_date
FROM (
    SELECT 
        contract,
        part_no,
        niin,
        category,
        date_entered,
        -- 仅按contract、part_no、niin分区,按日期降序排序
        ROW_NUMBER() OVER(PARTITION BY contract, part_no, niin ORDER BY date_entered DESC) rn
    FROM (**inner query**) -- 替换成你的内部查询
)
WHERE rn = 1;

方法二:先获取分组最大日期再关联

先通过子查询拿到每个分组的最新日期,再和原数据关联匹配对应的category:

WITH max_dates AS (
    SELECT 
        contract,
        part_no,
        niin,
        MAX(date_entered) AS most_recent_date
    FROM (**inner query**) -- 替换成你的内部查询
    GROUP BY contract, part_no, niin
)
SELECT 
    md.contract,
    md.part_no,
    md.niin,
    t.category,
    md.most_recent_date
FROM max_dates md
JOIN (**inner query**) t
    ON md.contract = t.contract
    AND md.part_no = t.part_no
    AND md.niin = t.niin
    AND md.most_recent_date = t.date_entered;

为什么原来的查询不行?

你原来的PARTITION BY包含了category,相当于把contract+part_no+niin+category作为分组单位,每个category都会算出自己的最大日期,所以两行结果都被保留。而我们需要的是contract+part_no+niin这一组的全局最新日期,所以分区条件里不能加category。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:38:22