ID ERROR STOCK TRD_DATE AUDIT_DATETIME
101692579 Y US9128 15-AUG-18 00.00.00 15-AUG-18 17.01.07 --gets missed
101692555 Y US9128 15-AUG-18 00.00.00 15-AUG-18 17.21.07
101692555 Y US9128 15-AUG-18 00.00.00 15-AUG-18 17.11.07
101692555 Y US9128 15-AUG-18 00.00.00 15-AUG-18 17.07.35
101692572 Y US912828 15-AUG-18 00.00.00 15-AUG-18 17.21.07
101692572 Y US912828 15-AUG-18 00.00.00 15-AUG-18 17.11.07
101692572 Y US912828 15-AUG-18 00.00.00 15-AUG-18 17.07.35
101692573 Y US912 15-AUG-18 00.00.00 15-AUG-18 17.21.07
101692573 Y US912 15-AUG-18 00.00.00 15-AUG-18 17.11.07
表格:贸易
我安排了在以下时间运行的作业:
17:00
17:10
17:20
17:30
作业在上面的Trade
表中查询处于错误状态的记录,例如where ERROR = Y
,然后将这些不良交易重新插入到同一表中,因此为什么上面重复了不同时间表的表格示例。目前用于查询这些交易的查询如下:
select
a.id,
a.error,
a.stock,
a.trd_date,
a.audit_datetime
from trade a
where to_char(audit_datetime, 'yyyymmdd') = to_char(sysdate, 'yyyymmdd')
and error = 'Y'
and to_char(a.audit_datetime, 'yyyymmddhh24mi') >= (select max(to_char(audit_datetime, 'yyyymmddhh24mi'))-1 from trade) --check for previous run errors
我依靠max(audit_datetime)
atm:
我有两个无法纠正的问题:
例如,当作业在@ 17:10运行时,我希望可以收集以下记录 重新插入“交易”表中,但第一个未填写:
101692579 Y US9128 15-AUG-18 00.00.00 15-AUG-18 17.01.07 --gets missed
101692555 Y US9128 15-AUG-18 00.00.00 15-AUG-18 17.07.35
101692572 Y US912828 15-AUG-18 00.00.00 15-AUG-18 17.07.35
我了解这是由于我的SQL中的最后一个过滤器,其中 audit_datetime
我想防止在一次运行中使用正确的经过改进的sql插入重复的重新插入,例如,不想拿起三个重新插入@ 17:30 Schedule:
101692572 Y US912828 15-AUG-18 00.00.00 15-AUG-18 17.21.07
101692572 Y US912828 15-AUG-18 00.00.00 15-AUG-18 17.11.07
101692572 Y US912828 15-AUG-18 00.00.00 15-AUG-18 17.07.35
对于给定的ID,查询应最多查看三个,然后仅重新插入一个。这些就是应该在17:30重新插入的内容:
101692555 Y US9128 15-AUG-18 00.00.00 15-AUG-18 17.21.07
101692572 Y US912828 15-AUG-18 00.00.00 15-AUG-18 17.21.07
101692573 Y US912 15-AUG-18 00.00.00 15-AUG-18 17.21.07