SELECT FILE_SUB_RET_DATE_TIME
FROM
(SELECT Y.FILE_SUB_RET_DATE_TIME,
ROW_NUMBER() OVER (partition by Y.WR_FILE_TRANS_INFO_ID order by Y.FILE_SUB_RET_DATE_TIME DESC) rowByID
FROM DPDBA.WORK_REQUEST_FILE_TRANS_AUDIT Y
WHERE Y.FILE_EVENT_TYPE = 'SUBMISSION'
AND Y.FILE_SUBMT_RETRL_STATUS = 'LEVEL1 POSTED'
AND Y.FILE_SUB_RET_DATE_TIME BETWEEN '11-DEC-2015' AND '03-FEB-2017')
WHERE rowByID = 1;
我遇到了一些性能问题,我们需要为这个日期列添加索引,我正在寻找帮助,无论是直接索引还是其他任何东西......
答案 0 :(得分:0)
与DATE值比较时不应使用STRINGS,因为它取决于当前会话NLS设置。使用DATE
文字或TO_DATE()
,函数(分别为TIMESTAMP
和TO_TIMESTAMP
)。
依赖于您的数据,Oracle是否会在FILE_SUB_RET_DATE_TIME列上使用索引,发布执行计划。
我不认为在你的情况下需要子查询,这个查询应该返回相同的结果。
SELECT Max(FILE_SUB_RET_DATE_TIME)
FROM DPDBA.WORK_REQUEST_FILE_TRANS_AUDIT Y
WHERE Y.FILE_EVENT_TYPE = 'SUBMISSION'
AND Y.FILE_SUBMT_RETRL_STATUS = 'LEVEL1 POSTED'
AND Y.FILE_SUB_RET_DATE_TIME BETWEEN DATE '2015-12-11' AND DATE '2017-02-03'
GROUP BY WR_FILE_TRANS_INFO_ID;