如何修正Oracle SQL查询以正确获取每位员工每小时的最新记录
Oracle SQL查询修复方案
现有代码问题点
- SELECT子句中多个查询字段之间缺少逗号分隔,属于语法错误,会导致SQL执行解析异常,是返回结果条数不符合预期的核心原因
- WHERE条件
SEQNUM = 1后多余的分号会提前终止SQL语句,导致后续ORDER BY逻辑不生效,同时可能触发执行器解析错误
修正后可用代码
select TRANSACTION_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME, TIME_STAMP from (select d.*, row_number() over (partition by EMPLOYEE_ID, trunc(TIME_STAMP, 'HH') order by TIME_STAMP desc) as SEQNUM from MAIN.DATABASE d ) d where SEQNUM = 1 order by TRANSACTION_ID desc;
补充说明
原有分组逻辑本身符合需求:按EMPLOYEE_ID+ 小时精度的TIME_STAMP分区,每个分区内按时间倒序取第一条,即可得到每位员工每小时的最新记录。如果修正语法后返回条数仍不符合预期,可检查TIME_STAMP字段类型是否带时区属性,如有需要可转换为本地时间后再做trunc处理,避免时区偏移导致的分组错误。
内容的提问来源于stack exchange,提问作者David Boutin
相关产品推荐
相关产品推荐

