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
相关产品推荐
相关产品推荐

