根据updated_timestamp

时间:2016-10-20 12:09:02

标签: sql db2

我想根据updated_timestamp获得刚刚插入/修改的记录。

我有DB2数据库的以下场景:

  1. 向DB触发insertupdate查询。该表包含updated_timestamp字段,用于捕获插入或更新的时间。
  2. 只想使用select查询获取我之前插入/更新的记录。
  3. 示例

    insert into table_name(x,y,CURRENT TIMESTAMP);
    

    希望使用select作为

    获取上面插入的记录
    select * from table_name where updated_timestamp > ?
    

    我应该用什么值替换?,上面的查询应该返回我最新插入的记录x,y,<time_stamp>

2 个答案:

答案 0 :(得分:0)

If I understand what your asking, couldn't you use a subquery pulling the max(updated_timestamp) and other values from the table and use that to filter to only the most recently updated records for each one?

Something like this:

insert into table_name (x, y, timestamp)
Select table_name.x, table_name.y, DateTime()
from table_name join (select x, y, Max(updated_timestamp) 
updated_timestamp from table_name) table_name2
on table_name.x = table_name2.x and table_name.y = tablename2.y
and table_name.updated_timestamp = table_name2.updated_timestamp

答案 1 :(得分:0)

如果您的db2版本作为此选项,您可以像这样使用最终表

 SELECT updated_timestamp 
 FROM FINAL TABLE (INSERT INTO table_name  (X, X, updated_timestamp )
                VALUES(valueforX, valueforY, CURRENT TIMESTAMP));

IBM Doc

您也可以使用变量:

CREATE OR REPLACE VARIABLE YOURLIB.MYTIMESTAMP TIMESTAMP DEFAULT CURRENT TIMESTAMP;
INSERT INTO table_name  (X, X, updated_timestamp )
VALUES(valueforX, valueforY, YOURLIB.MYTIMESTAMP));

但最好的解决方案是使用主键更新您的表格,然后使用主键获取时间戳。

建议,您使用触发器更新上次时间戳。也许可以像这样使用autotimestamp:

CREATE TABLE table_name  
(
X VARCHAR(36),
Y VARCHAR(36),
CHANGE_TS TIMESTAMP FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL
)