sql - 从一组记录中重新插入失败的记录
问题描述
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
表中处于 ERROR 状态的记录,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 运行时,我希望能够提取以下记录以重新插入到 Trade 表中,但第一个记录被遗漏了:
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 < max(audit_datetime)-1。我可以做些什么来解决这个问题?我不想硬编码任何给定的时间,从它应该从哪里查询。如何更改查询以考虑最小值(我的集合中的第一条记录)?
我想防止在一次运行中使用正确的改进 sql 插入重复的重新插入,例如不想选择三个并重新插入 @ 17:30 时间表:
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
解决方案
推荐阅读
- python - 使用for循环将图像从django模型显示到模板
- r - 如何遍历 R 中的列?
- android - 如何从 Cloud Firestore 的 OnCompleteListener 获取数据?
- javascript - 从 Ionic Storage 获取数据的问题
- javascript - 通过搜索/比较自动增加值并匹配 Google 表格脚本中的两列
- c# - 仅在 IIS 中发布时,在 ASP.net Core 3.1 WebAPI 中启用 CORS 时出错
- node.js - 出现 TypeScript 错误并找不到“@types/testing-library__cypress”的类型定义文件。TS2688
- windows - 制作 Powershell 脚本以在控制面板中打开程序和功能页面
- python - 在 Pandas 数据透视表的列中格式化时间格式
- r - 引用 dplyr 的 cross() 中的列名