有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将项从一个表重新插入到另一个表的java SQL逻辑?e、 g活动记录变为非活动记录

我有一张叫booking的桌子。主键是booking_id。该表有一个名为booking_num的列booking_num用于识别预订

另一张表是预订历史。目的是在一段时间后,比如说2天,将完成的预订记录从预订表转移到预订历史表。识别它的列将是completed_dt。 例如,completed_dt是'08-SEP-19'

我试图实现的是,在这个日期之后的2天之后,它将被移动到booking_hist表中

Should there be any null<->non-null conversions of the column? What is the logic I need to achieve this? How can i get the date to count 2 days?


共 (3) 个答案

  1. # 1 楼答案

    您可以安排SQL Agent作业每天运行,并调用存储过程来查看活动预订并检查已完成的任务,如:

      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());
    
  2. # 2 楼答案

    这听起来像是在计划的工作中应该发生的事情。 我会添加一个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查询更通用、更可重用