为了账号安全,请及时绑定邮箱和手机立即绑定

将项目从一个表重新插入到另一个表的 SQL 逻辑?例如,活动记录变成非活动记录

将项目从一个表重新插入到另一个表的 SQL 逻辑?例如,活动记录变成非活动记录

萧十郎 2023-08-04 19:08:25
我有一张名为 booking 的表。主键是booking_id. 该表有一列名为booking_num。booking_num用于识别预订。另一个表是booking_hist。目的是在一段时间后(假设是 2 天)将完整的预订记录从 booking 表传输到 booking_hist 表中。识别它的列将为completed_dt。例如,completed_dt是“08-SEP-19”。我想要实现的是,在此日期后的两天后,它将被移入booking_hist表中。列是否应该有 null<->non-null 转换?我需要什么逻辑才能实现这一目标?我怎样才能得到2天的日期?
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

这听起来像是预定工作中应该发生的事情。我会在预订中添加一个ready_for_archive列——只是一个布尔标志。


我将有一个查询标记在指定日期/时间之前发生的所有预订,并从 java 传递 2 天前的日期。就像是


 UPDATE booking

 SET ready_for_archive = 1

 WHERE completed_dt <= :MY_START_DATE

然后我会将所有这些记录添加到历史表中


 INSERT INTO booking_hist

 SELECT * FROM booking

 WHERE ready_for_archive = 1;

然后将它们从预订表中删除:


 DELETE FROM booking

 WHERE ready_for_archive = 1;

在执行该过程之前标记要存档的记录意味着不存在意外删除因时间太短而无法复制的记录的风险。


在Java中计算日期后传入,使得sql查询更加通用和可重用。


查看完整回答
反对 回复 2023-08-04
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

创建一个存储过程以从一个表移动到另一个表

如何用每日计划的作业调用oracle中的存储过程?

在 where 条件下添加 , trunc(sysdate) - to_date('completed_dt', 'yyyy-mm-dd') >2


查看完整回答
反对 回复 2023-08-04
?
守着一只汪

TA贡献1872条经验 获得超3个赞

您可以安排 SQL 代理作业每天运行并调用存储过程来浏览活动预订并检查 Completed_dt,如下所示:


-- add your insert here, e.g. INSERT INTO bookings_hist (...)

SELECT *

FROM booking b

LEFT JOIN booking_hist h

ON b.booking_id=h.booking_id

WHERE h.booking_id IS NULL

AND completed_dt IS NOT NULL

AND completed_dt<DATEADD(DAY,-2,GETDATE());


查看完整回答
反对 回复 2023-08-04
  • 3 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信