从一组记录中重新插入失败的记录

时间:2018-08-20 11:37:10

标签: sql oracle sql-insert

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:

我有两个无法纠正的问题:

  1. 例如,当作业在@ 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 。我可以采取什么替代措施来解决此问题?我不想从应该查询的地方给定时间进行硬编码。如何更改查询以考虑最小值(集合中的第一条记录)?

  1. 我想防止在一次运行中使用正确的经过改进的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

0 个答案:

没有答案