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

Oracle SQL查询:如何按类别提取最新记录的日期

解决方案:提取每个分类的最新时间记录

没问题,这个需求在日常SQL查询里很常见,从你用的TO_DATE语法能看出来是Oracle数据库,我们可以用窗口函数ROW_NUMBER()来高效实现。

核心思路是:先把符合时间范围和用户条件的记录按category分组,在每个分组内部按start_time降序排序,给最新的那条记录标记一个唯一序号(比如1),最后只筛选出序号为1的记录即可。

完整的SQL语句如下:

SELECT cust_id, start_time, category
FROM (
    SELECT 
        cust_id, 
        start_time, 
        category,
        -- 按category分组,组内按start_time倒序排,最新的记录rn=1
        ROW_NUMBER() OVER (PARTITION BY category ORDER BY start_time DESC) AS rn
    FROM events
    WHERE cust_id = '860730' 
      AND start_time BETWEEN TO_DATE('07/11/2020 00:00:00', 'DD/MM/YYYY hh24:mi:ss') 
                         AND TO_DATE('08/11/2020 00:00:00', 'DD/MM/YYYY hh24:mi:ss')
)
WHERE rn = 1
-- 按category升序排列,和你想要的输出顺序一致
ORDER BY category ASC;

关键部分解释:

  • PARTITION BY category:将查询结果按category拆分成独立的分组,每个分组内单独处理排序逻辑
  • ORDER BY start_time DESC:在每个分组内部,把时间最新的记录排在最前面,对应的rn值为1
  • 外层WHERE rn = 1:只保留每个分组里标记为1的记录,也就是每个category的最新时间记录
  • 最后加上ORDER BY category ASC,确保输出结果按分类编号升序排列,和你给出的目标结果格式匹配

执行这个查询后,就能得到你想要的每个分类对应最新时间的单条记录啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:38:53