查询t_transactions近5分钟更新记录出错,请求协助排查
问题排查与修正方案
你的SQL语句核心逻辑完全倒置了,这是导致返回大量旧记录的根本原因:
当前条件 last_update_dt < dateadd(minute,-5,getdate()) 是筛选所有早于5分钟前的记录,自然会返回多年的历史数据,和你要的「近5分钟内更新(介于1秒至5分钟前)」需求完全相反。
修正后的条件逻辑
要筛选last_update_dt落在5分钟前到1秒前的记录,需要把时间范围条件调整为:
last_update_dt >= dateadd(minute, -5, getdate()) and last_update_dt <= dateadd(second, -1, getdate())
如果习惯用between(闭区间匹配),也可以写成:
last_update_dt between dateadd(minute, -5, getdate()) and dateadd(second, -1, getdate())
补充优化建议
create_Dt <= last_update_dt:如果表的业务规则已经保证创建时间不会晚于更新时间,这个条件可以去掉,减少不必要的过滤开销;distinct cust_no, rec_amt:如果不需要对cust_no和rec_amt的组合去重,建议删除distinct,避免额外的查询性能损耗。
完整修正后的SQL
select distinct cust_no, rec_amt from t_transactions where create_Dt <= last_update_dt and last_update_dt >= dateadd(minute, -5, getdate()) and last_update_dt <= dateadd(second, -1, getdate()) and rec_amt is not null
内容的提问来源于stack exchange,提问作者YelizavetaYR
相关产品推荐
相关产品推荐

